Python: list列表的11个内置方法

先来逼逼两句:

在实际开发中,经常需要将一组(不只一个)数据存储起来,以便后边的代码使用。
在VBA中有使用数组,可以把多个数据存储到一起,通过数组下标可以访问数组中的每个元素。
Python 中没有数组,但是加入了更加强大的列表(list)。
下面就对列表的内置方法进行介绍。
请添加图片描述

通过dir(list)可以查看列表的属性和内置方法。  
print(dir(list)) 
Python学习交流Q群:660193417### ['__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 – 表示到添加到列表末尾的数据,它可以是单个元素,也可以是列表、元组等。

在列表的末尾追加元素。

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群:660193417### 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: [] 
列表清空后的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)) 
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。
请添加图片描述