前言 在實際開發中,經常需要將一組(不只一個)數據存儲起來,以便後邊的代碼使用。在VBA中有使用數組,可以把多個數據存儲 到一起,通過數組下標可以訪問數組中的每個元素。Python 中沒有數組,但是加入了更加強大的列表(list)。下麵就對列表的內 置方法進行介紹。 通過dir(list)可以查看列 ...
前言
在實際開發中,經常需要將一組(不只一個)數據存儲起來,以便後邊的代碼使用。在VBA中有使用數組,可以把多個數據存儲
到一起,通過數組下標可以訪問數組中的每個元素。Python 中沒有數組,但是加入了更加強大的列表(list)。下麵就對列表的內
置方法進行介紹。
通過dir(list)可以查看列表的屬性和內置方法。
print(dir(list)) Python學習交流Q群:906715085### ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
可以看出,列表有11個內置方法。
1 append()、extend()、insert()方法
2 clear()、remove()、pop()方法
3 count()、index()方法
4 sort()、reverse()方法
5 copy()方法
1 append()、extend()、insert()方法
list.append(obj)
obj – 表示到添加到列表末尾的數據,它可以是單個元素,也可以是列表、元組等。
在列表的末尾追加元素。
Python學習交流Q群:906715085### list1 = ['Python', 'C++', 'Java'] # 追加元素 list1.append('PHP') print(list1) #追加元組,整個元組被當成一個元素 t = ('JavaScript', 'C#', 'Go') list1.append(t) print(list1) #追加列表,整個列表被當成一個元素 list1.append(['Ruby', 'SQL']) print(list1)
['Python', 'C++', 'Java', 'PHP'] ['Python', 'C++', 'Java', 'PHP', ('JavaScript', 'C#', 'Go')] ['Python', 'C++', 'Java', 'PHP', ('JavaScript', 'C#', 'Go'), ['Ruby', 'SQL']]
list.extend(seq)
seq – 元素列表,可以是列表、元組、集合、字典,若為字典,則僅會將鍵(key)作為元素依次添加至原列表的末尾。
在列表末尾一次性追加另一個序列中的多個值(用新列表擴展原來的列表)。
extend() 和 append() 的不同之處在於:extend() 不會把列表或元組視為一個整體,而是把它們包含的元素逐個添加到列表中。
Python學習交流Q群:906715085### list2 = ['Python', 'C++', 'Java'] # 追加元素 list2.extend('C') print(list2) # 追加元組,元祖被拆分成多個元素 t = ('JavaScript', 'C#', 'Go') list2.extend(t) print(list2) # 追加列表,列表被拆分成多個元素 list2.extend(['Ruby', 'SQL']) print(list2)
['Python', 'C++', 'Java', 'C'] ['Python', 'C++', 'Java', 'C', 'JavaScript', 'C#', 'Go'] ['Python', 'C++', 'Java', 'C', 'JavaScript', 'C#', 'Go', 'Ruby', 'SQL']
list.insert(index, obj)
index – 對象obj需要插入的索引位置。
obj – 要插入列表中的對象。
將指定對象插入列表的指定位置。
list3 = ['Google', 'Runoob', 'Taobao'] list3.insert(1, 'Baidu') print ('列表插入元素後為 : ', list3) 列表插入元素後為 : ['Google', 'Baidu', 'Runoob', 'Taobao']
2 clear()、remove()、pop()方法
list.clear()
清空列表,類似於del a[:]。
list1 = ['Google', 'Runoob', 'Taobao', 'Baidu'] list2 = ['Google', 'Runoob', 'Taobao', 'Baidu'] list1.clear() del list2[:] print("列表清空後的list1: ", list1) print("列表清空後的list2: ", list2) 列表清空後的list1: [] 列表清空後的list2: [] list.remove(obj)
移除列表中某個值的第一個匹配項。
list1 = ['Google', 'Baidu', 'Runoob', 'Taobao', 'Baidu'] list1.remove('Taobao') print ("列表現在為 : ", list1) list1.remove('Baidu') print ("列表現在為 : ", list1) 列表現在為 : ['Google', 'Baidu', 'Runoob', 'Baidu'] 列表現在為 : ['Google', 'Runoob', 'Baidu'] list.pop([index=-1])
index – 可選參數,要移除列表元素的索引值,不能超過列表總長度,預設為 index=-1,刪除最後一個列表值。
移除列表中的一個元素(預設最後一個元素),並且返回該元素的值。
list1 = ['Google', 'Runoob', 'Taobao'] print(list1.pop()) print ("列表現在為 : ", list1, end="\n\n") print(list1.pop(0)) print ("列表現在為 : ", list1) Taobao 列表現在為 : ['Google', 'Runoob'] Google 列表現在為 : ['Runoob']
3 count()、index()方法
list.count(obj)
統計某個元素在列表中出現的次數。
aList = [123, 'Google', 'Runoob', 'Taobao', 123]; print ("123 元素個數 : ", aList.count(123)) print ("Runoob 元素個數 : ", aList.count('Runoob')) 123 元素個數 : 2 Runoob 元素個數 : 1 list.index(x[, start[, end]])
start -- 可選,查找的起始位置。
end -- 可選,查找的結束位置。
從列表中找出某個值第一個匹配項的索引位置,如果沒有找到對象則拋出異常。
list1 = ['Google', 'Runoob', 'Taobao', 'Runoob', 'QQ'] print ('Runoob 索引值為', list1.index('Runoob')) print ('Runoob 索引值為', list1.index('Runoob',2,4)) Runoob 索引值為 1 Runoob 索引值為 3
4 sort()、reverse()方法
list.sort( key=None, reverse=False)
key -- 指定在進行比較前要在每個列表元素上調用的函數(或其他可調用對象)。
reverse -- 排序規則,reverse = True 降序, reverse = False 升序(預設)。
aList = ['Google', 'Runoob', 'Taobao', 'Facebook'] aList.sort() # 升序排列 print("List : ", aList) List : ['Facebook', 'Google', 'Runoob', 'Taobao'] # 獲取序列的第二個元素 def take_second(elem): return elem[1] # 列表 list1 = [(2, 2), (3, 4), (4, 1), (1, 3)] # 指定第二個元素,升序排列 list1.sort(key=take_second) # 輸出類別 print('排序後的列表:', list1) 排序後的列表:[(4, 1), (2, 2), (1, 3), (3, 4)]
對於排序,Python中還有一個 sorted() 內置函數。兩者的區別在於,list.sort() 方法會直接修改原列表(並返回 None 以避免混
淆),而 sorted() 內置函數會返回一個新的排序後的列表。
student_tuples = [('john', 'A', 15),('jane', 'B', 12),('dave', 'B', 10)] new_tuples = sorted(student_tuples, key=lambda student: student[2]) # sort by age print("排序前:",student_tuples) print("排序後:",new_tuples) 排序前:[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)] 排序後:[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)] list.reverse()
對列表的元素進行反向排序。
list1 = ['Google', 'Runoob', 'Taobao', 'Baidu'] list1.reverse() print ("列表反向排序後: ", list1)
列表反向排序後: ['Baidu', 'Taobao', 'Runoob', 'Google']
5 copy()方法
list.copy()
複製列表,類似於 a[:]。
註意:list.copy()方法所遵循的拷貝原理,是淺拷貝,也就是說,只拷貝父對象,不會拷貝對象內部的子對象。關於深拷貝和淺拷
貝的更多內容,參見
文末的延伸閱讀[1]。
a = [1, 2, [3, 4], 5, 6] b = a.copy() a.append(7) a[2][1] = 10 print("a = ", a) print("b = ", b) a = [1, 2, [3, 10], 5, 6, 7] b = [1, 2, [3, 10], 5, 6]
可以看出,列表a中新增元素,對列表b沒有影響;但是如果修改了a中的列表對象,同樣也會影響到b。