列表list
列表(list)作为 Python 中最常用的数据类型之一,是一个可增加、删除元素的可变(mutable)容器。
创建列表
1 2 3 lst = [] lst1 = [1 ,'xiaoming' ,29.5 ,'17312662388' ] lst2 = [['hello' ,'world' ],[12 ,'abc' ],['冰箱' ,'空调' ]]
查看列表长度
1 2 3 len(lst) len(lst1) len(lst2)
遍历列表
1 2 3 4 5 6 7 In [16 ]: for t in lst1: ...: print(t) ...: 1 xiaoming 29.5 17312662388
1 2 3 4 5 6 In [17 ]: for t1,t2 in lst2: ...: print(t1,t2) ...: hello world 12 abc冰箱 空调
元素在列表中的位置
1 2 3 4 5 6 7 In [18 ]: ls_3=[1 , 3 , 12.3 , 'apple' , 0.001 , 'apple' , 'orange' , 1 , 2 , 3 , 4 ] In [19 ]: ls_3.index("apple" ) Out[19 ]: 3 In [20 ]: ls_3.index(3 ) Out[20 ]: 1
列表中增加元素
方法1 ,使用列表的append方法在列表尾部添加元素
1 2 3 4 In [21 ]: lst = ['abc' ,'123' ] In [22 ]: lst.append('efg' ) In [23 ]: lst Out[23 ]: ['abc' , '123' , 'efg' ]
1 2 3 4 In [24 ]: lst = ['abc' ,'123' ] In [25 ]: lst.insert(1 ,'hello' ) In [26 ]: lst Out[26 ]: ['abc' , 'hello' , '123' ]
合并列表
1 2 3 4 5 ls_3 = ['abc' ,'123' ] ls_3.extend([1 , 2 , 3 ]) ls_3.extend([4 ,5 ]) print (ls_3)
1 2 3 4 In [27 ]: ls_3 = ['abc' ,'123' ] In [28 ]: ls_4 = [4 ,5 ] In [29 ]: ls_3+ls_4 Out[29 ]: ['abc' , '123' , 4 , 5 ]
1 2 3 4 5 6 7 8 9 In [27 ]: ls_3 = ['abc' ,'123' ] In [28 ]: ls_4 = [4 ,5 ] In [31 ]: [*ls_3] Out[31 ]: ['abc' , '123' ] In [32 ]: [ls_3] Out[32 ]: [['abc' , '123' ]] In [33 ]: [*ls_3,*ls_4] Out[33 ]: ['abc' , '123' , 4 , 5 ]
移除列表元素
列表的pop默认移除最后一个元素,一个移除指定元素
1 2 3 4 5 6 7 8 9 10 11 12 In [35 ]: lst = ['abc' , '123' , 'efg' ,'苹果' ,'香蕉' ] In [36 ]: a = lst.pop() In [37 ]: a Out[37 ]: '香蕉' In [38 ]: lst Out[38 ]: ['abc' , '123' , 'efg' , '苹果' ] In [39 ]: b = lst.pop(1 ) In [40 ]: b Out[40 ]: '123' In [41 ]: lst Out[41 ]: ['abc' , 'efg' , '苹果' ]
1 2 3 4 5 lst = ['abc' , '123' , 'efg' ] a = lst.remove('efg' ) print(a) print(lst)
1 2 3 a = ['苹果' ,'香蕉' ,'橘子' ,'香蕉' ] del a[2 ]a
列表的深浅拷贝
1 2 3 4 5 6 lst = ['你好' ,['hello' ,'world' ],[12 ,'abc' ]] copy1 = lst.copy() copy1[1 ][0 ] = 3 print(lst) print(copy1)
要想实现深度拷贝,需要使用 copy
模块的 deepcopy
函数
1 2 3 4 5 6 7 from copy import deepcopylst = ['你好' ,['hello' ,'world' ],[12 ,'abc' ]] copy1 = deepcopy(lst) copy1[1 ][0 ] = 3 print(lst) print(copy1)
判断元素是否在列表中
列表所有数据类型的元素,都可以用该方法判断
1 2 3 4 5 6 7 8 9 10 11 12 13 a = [1 ,2 ,3 ] 1 in a 5 in a b = ['你' ,'好' ,'啊' ] '你' in b c = [(1 ,2 ),(3 ,4 )] (1 ,2 ) in c c = [([1 ,2 ],2 ),(3 ,4 )] ([1 ,2 ],2 ) in c d = [[1 ,2 ],[3 ,4 ]] [1 ,2 ] in d [1 ,3 ] in d 'ab' in 'abc'
列表的切片
1 2 a = list(range(1 ,20 ,3 )) print(a)
切片的返回结果也是一个列表
使用 a[:3]
获取列表 a 的前三个元素
使用 a[-1]
获取 a 的最后一个元素,返回 int 型,值为 19
使用 a[:-1]
获取除最后一个元素的切片 [1, 4, 7, 10, 13, 16]
使用 a[1:5]
生成索引为 [1,5)
(不包括索引 5)的切片 [4, 7, 10, 13]
使用 a[1:5:2]
生成索引 [1,5)
但步长为 2 的切片 [4,10]
使用 a[::3]
生成索引 [0,len(a))
步长为 3 的切片 [1,10,19]
使用 a[::-1]
生成逆向索引 [len(a),0)
的切片 [19, 16, 13, 10, 7, 4, 1]
使用 a[::-3]
生成逆向索引 [len(a),0)
步长为 3 的切片 [19,10,1]
需要注意的是,a[1:5:-1]
执行会返回空列表,不是生成[1,5)
的逆向索引,如果要生成[1,5)
的逆向索引,可以用如下方式:
1 2 3 a[1 :5 :-1 ] b = a[1 :5 ] b[::-1 ]
列表的操作符
列表的操作符只支持+、*
1 2 3 4 5 6 7 8 In [44 ]: [1 , 2 ,]+[2 , 3 ] Out[44 ]: [1 , 2 , 2 , 3 ] In [42 ]: [1 ]*3 Out[42 ]: [1 , 1 , 1 ] In [43 ]: [1 ,2 ]*3 Out[43 ]: [1 , 2 , 1 , 2 , 1 , 2 ]
列表中某个元素的数量
1 2 3 a = ['苹果' ,'香蕉' ,'橘子' ,'香蕉' ] print(a.count('苹果' )) print(a.count('香蕉' ))
列表转化为集合
1 2 3 4 5 6 a = ['苹果' ,'香蕉' ,'橘子' ,'香蕉' ] set(a) a = [[1 ,2 ],[1 ,2 ],[1 ,2 ,3 ]] set(a)
判断中有无重复元素
1 2 3 4 5 6 7 8 9 def judge_duplicated (lst) : for x in lst: if lst.count(x) > 1 : return True return False def judge_duplicated (lst) : return len(lst) != len(set(lst))
列表使用python内置函数
python内置函数无需import
1 2 3 4 5 len([1 ,2 ,3 ,4 ,5 ]) max([1 , 5 , 65 , 5 ]) min([1 , -1 , 89 ]) sorted(['10' ,'3' ,'2' ])
列表数据重洗
1 2 3 4 from random import shufflea = [1 ,3 ,2 ,5 ,6 ] shuffle(a) a
列表逆置
方法1,使用列表的reverse方法对列表元素逆置
1 2 3 4 5 In [52 ]: a = [1 ,3 ,2 ,5 ,6 ] In [53 ]: a.reverse() In [54 ]: a Out[54 ]: [6 , 5 , 2 , 3 , 1 ]
方法2,使用python内置函数reversed方法对列表元素逆置
1 2 3 4 In [52 ]: a = [1 ,3 ,2 ,5 ,6 ] In [56 ]: list(reversed(a)) Out[56 ]: [6 , 5 , 2 , 3 , 1 ]
1 2 3 In [102 ]: a = [1 ,3 ,2 ,5 ,6 ] In [103 ]: a[::-1 ] Out[103 ]: [6 , 5 , 2 , 3 , 1 ]
列表排序规则
1 2 3 a = [1 ,3 ,2 ,5 ,6 ] sorted(a)
如下所示,按照每一个列表的第二个位置排序:
1 2 3 4 5 6 7 8 9 In [45 ]: a=[[1 ,2 ],[4 ,1 ],[9 ,10 ],[13 ,-3 ]] In [46 ]: a.sort(key=lambda x: x[1 ]) In [47 ]: a Out[47 ]: [[13 , -3 ], [4 , 1 ], [1 , 2 ], [9 , 10 ]] In [48 ]: a=[[1 ,2 ],[4 ,1 ],[9 ,10 ],[13 ,-3 ]] In [49 ]: sorted(a,key = lambda x: x[1 ] ) Out[49 ]: [[13 , -3 ], [4 , 1 ], [1 , 2 ], [9 , 10 ]]
列表重复最多的元素
1 2 3 In [50 ]: a = [1 ,2 ,3 ,3 ,4 ,2 ,3 ] In [51 ]: max(a,key=lambda x: a.count(x), default=1 ) Out[51 ]: 3
元组tuple
元祖与列表很相似,只不过元组是不可变(immutable)对象(即不可哈希对象),元组中的元素不能修改 ,没有增加、删除元素的方法。元组一旦创建后,长度就被唯一确定
创建元素
1 2 3 4 tup_0 = tuple() tup_1 = () tup_2 = (1 , ) tup_3 = (1 , 3 , "apple" , 66 )
元组除了没有增加、删除元素的方法,不能修改,其他用法与list完全一样,如果我们想要高效的操作元祖,大可用python内置函数list将元祖转化为列表
上述列表中的操作,除了增加、删除元素的操作之外,其他的列表操作方法完全可以用在元组上,这里就不一一介绍了
这里仅说明一些需要注意的点
对于元组,里面的元素可以是任意数据类型,这就意味着也可以是列表、字典等可哈希类型,如下所示:
1 2 3 4 5 6 In [82 ]: a = ([1 ,2 ],) In [83 ]: a[0 ][0 ]=3 In [84 ]: a Out[84 ]: ([3 , 2 ],) In [79 ]: type(a) Out[79 ]: tuple
刚刚明明说好元组中的元素不能改变,为什么这里变了?
这里元组中存的列表的地址,换句话说列表的地址没有改变,只是地址对应的内容变了,如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 In [85 ]: lst = [1 ,2 ] In [91 ]: id(lst) Out[91 ]: 2763791008392 In [89 ]: tup=(lst,) In [90 ]: tup Out[90 ]: ([1 , 2 ],) In [92 ]: lst[0 ]=3 In [93 ]: lst Out[93 ]: [3 , 2 ] In [94 ]: tup Out[94 ]: ([3 , 2 ],) In [95 ]: id(lst) Out[95 ]: 2763791008392
可以看到,列表的地址并没有改变