列出方法和支援的運算子
從給定列表開始 a
:
a = [1, 2, 3, 4, 5]
-
append(value)
- 將新元素附加到列表的末尾。# Append values 6, 7, and 7 to the list a.append(6) a.append(7) a.append(7) # a: [1, 2, 3, 4, 5, 6, 7, 7] # Append another list b = [8, 9] a.append(b) # a: [1, 2, 3, 4, 5, 6, 7, 7, [8, 9]] # Append an element of a different type, as list elements do not need to have the same type my_string = "hello world" a.append(my_string) # a: [1, 2, 3, 4, 5, 6, 7, 7, [8, 9], "hello world"]
請注意,
append()
方法僅將一個新元素附加到列表的末尾。如果將列表附加到另一個列表,則追加的列表將成為第一個列表末尾的單個元素。# Appending a list to another list a = [1, 2, 3, 4, 5, 6, 7, 7] b = [8, 9] a.append(b) # a: [1, 2, 3, 4, 5, 6, 7, 7, [8, 9]] a[8] # Returns: [8,9]
-
extend(enumerable)
- 通過附加另一個可列舉的元素來擴充套件列表。a = [1, 2, 3, 4, 5, 6, 7, 7] b = [8, 9, 10] # Extend list by appending all elements from b a.extend(b) # a: [1, 2, 3, 4, 5, 6, 7, 7, 8, 9, 10] # Extend list with elements from a non-list enumerable: a.extend(range(3)) # a: [1, 2, 3, 4, 5, 6, 7, 7, 8, 9, 10, 0, 1, 2]
列表也可以與
+
運算子連線。請注意,這不會修改任何原始列表:a = [1, 2, 3, 4, 5, 6] + [7, 7] + b # a: [1, 2, 3, 4, 5, 6, 7, 7, 8, 9, 10]
-
index(value, [startIndex])
- 獲取輸入值第一次出現的索引。如果輸入值不在列表中,則引發ValueError
異常。如果提供了第二個引數,則在該指定索引處開始搜尋。a.index(7) # Returns: 6 a.index(49) # ValueError, because 49 is not in a. a.index(7, 7) # Returns: 7 a.index(7, 8) # ValueError, because there is no 7 starting at index 8
-
insert(index, value)
- 在指定的index
之前插入value
。因此,在插入之後,新元素佔據位置index
。a.insert(0, 0) # insert 0 at position 0 a.insert(2, 5) # insert 5 at position 2 # a: [0, 1, 5, 2, 3, 4, 5, 6, 7, 7, 8, 9, 10]
-
pop([index])
- 刪除並返回index
的專案。如果沒有引數,它將刪除並返回列表的最後一個元素。a.pop(2) # Returns: 5 # a: [0, 1, 2, 3, 4, 5, 6, 7, 7, 8, 9, 10] a.pop(8) # Returns: 7 # a: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # With no argument: a.pop() # Returns: 10 # a: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
-
remove(value)
- 刪除指定值的第一個匹配項。如果找不到提供的值,則會引發ValueError
。a.remove(0) a.remove(9) # a: [1, 2, 3, 4, 5, 6, 7, 8] a.remove(10) # ValueError, because 10 is not in a
-
reverse()
- 將列表轉換為原位並返回None
。a.reverse() # a: [8, 7, 6, 5, 4, 3, 2, 1]
還有其他方法可以反轉列表 。
-
count(value)
- 計算列表中某些值的出現次數。a.count(7) # Returns: 2
-
sort()
- 按數字和字典順序對列表進行排序並返回None
。a.sort() # a = [1, 2, 3, 4, 5, 6, 7, 8] # Sorts the list in numerical order
使用
sort()
方法中的reverse=True
標誌進行排序時,列表也可以反轉。a.sort(reverse=True) # a = [8, 7, 6, 5, 4, 3, 2, 1]
如果要按項的屬性排序,可以使用
key
關鍵字引數:import datetime class Person(object): def __init__(self, name, birthday, height): self.name = name self.birthday = birthday self.height = height def __repr__(self): return self.name l = [Person("John Cena", datetime.date(1992, 9, 12), 175), Person("Chuck Norris", datetime.date(1990, 8, 28), 180), Person("Jon Skeet", datetime.date(1991, 7, 6), 185)] l.sort(key=lambda item: item.name) # l: [Chuck Norris, John Cena, Jon Skeet] l.sort(key=lambda item: item.birthday) # l: [Chuck Norris, Jon Skeet, John Cena] l.sort(key=lambda item: item.height) # l: [John Cena, Chuck Norris, Jon Skeet]
在 dicts 列表的情況下,概念是相同的:
import datetime l = [{'name':'John Cena', 'birthday': datetime.date(1992, 9, 12),'height': 175}, {'name': 'Chuck Norris', 'birthday': datetime.date(1990, 8, 28),'height': 180}, {'name': 'Jon Skeet', 'birthday': datetime.date(1991, 7, 6), 'height': 185}] l.sort(key=lambda item: item['name']) # l: [Chuck Norris, John Cena, Jon Skeet] l.sort(key=lambda item: item['birthday']) # l: [Chuck Norris, Jon Skeet, John Cena] l.sort(key=lambda item: item['height']) # l: [John Cena, Chuck Norris, Jon Skeet]
按子字典排序:
import datetime l = [{'name':'John Cena', 'birthday': datetime.date(1992, 9, 12),'size': {'height': 175, 'weight': 100}}, {'name': 'Chuck Norris', 'birthday': datetime.date(1990, 8, 28),'size' : {'height': 180, 'weight': 90}}, {'name': 'Jon Skeet', 'birthday': datetime.date(1991, 7, 6), 'size': {'height': 185, 'weight': 110}}] l.sort(key=lambda item: item['size']['height']) # l: [John Cena, Chuck Norris, Jon Skeet]
使用 attrgetter
和 itemgetter
排序的更好方法
列表也可以使用運算子模組中的 attrgetter
和 itemgetter
函式進行排序。這些可以幫助提高可讀性和可重用性。這裡有些例子,
from operator import itemgetter,attrgetter
people = [{'name':'chandan','age':20,'salary':2000},
{'name':'chetan','age':18,'salary':5000},
{'name':'guru','age':30,'salary':3000}]
by_age = itemgetter('age')
by_salary = itemgetter('salary')
people.sort(key=by_age) #in-place sorting by age
people.sort(key=by_salary) #in-place sorting by salary
itemgetter
也可以給一個索引。如果要根據元組的索引進行排序,這將非常有用。
list_of_tuples = [(1,2), (3,4), (5,0)]
list_of_tuples.sort(key=itemgetter(1))
print(list_of_tuples) #[(5, 0), (1, 2), (3, 4)]
如果要按物件的屬性排序,請使用 attrgetter
,
persons = [Person("John Cena", datetime.date(1992, 9, 12), 175),
Person("Chuck Norris", datetime.date(1990, 8, 28), 180),
Person("Jon Skeet", datetime.date(1991, 7, 6), 185)] #reusing Person class from above example
person.sort(key=attrgetter('name')) #sort by name
by_birthday = attrgetter('birthday')
person.sort(key=by_birthday) #sort by birthday
-
clear()
- 從列表中刪除所有專案a.clear() # a = []
-
複製 - 將現有列表乘以整數將生成一個更大的列表,其中包含原始的多個副本。這對於列表初始化很有用:
b = ["blah"] * 3 # b = ["blah", "blah", "blah"] b = [1, 3, 5] * 5 # [1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5]
如果列表包含物件的引用(例如列表列表),請注意這一點,請參閱常見陷阱 - 列表乘法和公共引用 。
-
元素刪除 - 可以使用
del
關鍵字和切片表示法刪除列表中的多個元素:a = list(range(10)) del a[::2] # a = [1, 3, 5, 7, 9] del a[-1] # a = [1, 3, 5, 7] del a[:] # a = []
-
仿形
預設分配“=”將原始列表的引用分配給新名稱。也就是說,原始名稱和新名稱都指向同一個列表物件。通過其中任何一項所做的更改將反映在另一項中。這通常不是你想要的。
b = a a.append(6) # b: [1, 2, 3, 4, 5, 6]
如果要建立列表的副本,請選擇以下選項。
你可以切片:
new_list = old_list[:]
你可以使用內建的
list()
函式:new_list = list(old_list)
你可以使用通用
copy.copy()
:import copy new_list = copy.copy(old_list) #inserts references to the objects found in the original.
這比
list()
慢一點,因為它必須首先找出 old_list 的資料型別。如果列表包含物件並且你也想要複製它們,請使用通用
copy.deepcopy()
:import copy new_list = copy.deepcopy(old_list) #inserts copies of the objects found in the original.
顯然是最慢和最需要記憶體的方法,但有時是不可避免的。
Python 3.x >= 3.0
copy()
- 返回列表的淺表副本
aa = a.copy()
# aa = [1, 2, 3, 4, 5]