python 之 列表list && 元组tuple
目录:
- 列表
- 列表基本操作
- 列表的操作符
- 列表的函数和方法
- 元组
介绍:
列表是一种可变的有序集合,可以进行访问、添加和删除操作。
元组是一种不可变的有序集合,可以访问。
1、列表的基本操作
创建列表
1 ls = ['mary', 'tom', 'kate'] 2 ['mary', 'tom', 'kate']
注意:列表中的元素可以为不同类型,且可以为列表
1 In [29]: ls2=[1,2,'d','fairy',[1,4]] 2 In [30]: ls2 3 Out[30]: [1, 2, 'd', 'fairy', [1, 4]]
列表元素的访问和截取
1 In [7]: ls[1] 2 Out[7]: 'tom' 3 4 In [8]: ls[-1] 5 Out[8]: 'kate' 6 7 // 包含1从1开始的元素:ls[1],ls[2] 8 In [11]: ls[1:] 9 Out[11]: ['tom', 'kate'] 10 11 // 不包含2到2为止的元素:ls[0],ls[1] 12 In [13]: ls[:2] 13 Out[13]: ['mary', 'tom'] 14 15 // ls中的所有元素 16 In [9]: ls[:] 17 Out[9]: ['mary', 'tom', 'kate']
更新和添加列表元素
1 // 更新列表元素 2 In [92]: ls[1]='jerry' 3 In [93]: ls 4 Out[93]: ['mary', 'jerry', 'kate']
1 // 在列表尾部添加元素 'me' 2 In [16]: ls.append('me') 3 In [17]: ls 4 Out[17]: ['mary', 'tom', 'kate', 'me'] 5 6 // 在列表索引为2处添加元素 'jack' 7 In [18]: ls.insert(2,'jack') 8 In [19]: ls 9 Out[19]: ['mary', 'tom', 'jack', 'kate', 'me']
注意:不存在的元素不可以用索引来引用或添加
1 // 注意:不存在的元素不可以用索引来引用或者添加 2 In [14]: ls[3] 3 --------------------------------------------------------------------------- 4 IndexError Traceback (most recent call last) 5 <ipython-input-14-bc53f97bfb95> in <module>() 6 ----> 1 ls[3] 7 IndexError: list index out of range 8 9 In [15]: ls[3]='me' 10 --------------------------------------------------------------------------- 11 IndexError Traceback (most recent call last) 12 <ipython-input-15-41a017d867bd> in <module>() 13 ----> 1 ls[3]='me' 14 IndexError: list assignment index out of range
删除列表元素
1 // 删除列表的最后一个元素,且返回此元素 2 In [20]: ls.pop() 3 Out[20]: 'me' 4 In [21]: ls 5 Out[21]: ['mary', 'tom', 'jack', 'kate'] 6 7 // 删除列表索引为2处的元素且返回此元素 8 In [22]: ls.pop(2) 9 Out[22]: 'jack' 10 In [23]: ls 11 Out[23]: ['mary', 'tom', 'kate'] 12 13 // 移除列表中匹配为'tom'的元素,不返回任何值 14 In [25]: ls.remove('tom') 15 In [26]: ls 16 Out[26]: ['mary', 'kate'] 17 18 // 清空列表 19 lIn [27]: ls.clear() 20 In [28]: ls 21 Out[28]: []
1 // 删除索引为0的列表元素 2 In [88]: ls 3 Out[88]: [1, 2] 4 In [89]: del ls[0] 5 In [90]: ls 6 Out[90]: [2]
删除列表
1 In [96]: lss=[1,2,3] 2 In [97]: del lss 3 In [98]: lss 4 --------------------------------------------------------------------------- 5 NameError Traceback (most recent call last) 6 <ipython-input-98-3ee6987b75c4> in <module>() 7 ----> 1 lss 8 9 NameError: name 'lss' is not defined
2、列表操作符
1 // 列表长度 2 In [33]: len([1,2,3]) 3 Out[33]: 3 4 5 // 列表加 6 In [34]: [1,2,3]+[4,5,6] 7 Out[34]: [1, 2, 3, 4, 5, 6] 8 9 // 列表乘 10 In [35]: ['Echo']*3 11 Out[35]: ['Echo', 'Echo', 'Echo'] 12 13 // 判断是否在列表中 14 In [36]: 1 in [1,2,3] 15 Out[36]: True 16 17 In [37]: 1 in [4,2,3] 18 Out[37]: False
3、列表的函数和方法
函数
1 // 返回列表长 2 In [38]: len([1,2,3]) 3 Out[38]: 3 4 5 // 返回列表中最大元素 6 In [39]: max([1,2,3]) 7 Out[39]: 3 8 9 // 返回列表中最小元素 10 In [40]: min([1,2,3]) 11 Out[40]: 1 12 13 // 将元组转化为列表 14 In [41]: list((1,2,3)) 15 Out[41]: [1, 2, 3]
方法
1 // 统计列表中'a'出现的次数,并返回次数 2 In [70]: ['a','b','f',1,'a',3].count('a') 3 Out[70]: 2 4 5 // 统计列表中'a'第一次出现的索引,并返回索引号 6 In [73]: ['a','b','f',1,'a',3].index('a') 7 Out[73]: 0 8 9 // 在列表后追加l另一列表中多个元素,不返回 10 In [42]: ls=['a','b','f',1,'a',3] 11 In [45]: ls.extend([1,7,8]) 12 In [46]: ls 13 Out[46]: ['a', 'b', 'f', 1, 'a', 3, 1, 7, 8] 14 15 // 列表的元素反转,不返回 16 In [49]: ls.reverse() 17 In [50]: ls 18 Out[50]: [8, 7, 1, 3, 'a', 1, 'f', 'b', 'a'] 19 20 // 列表的排序(可以在sort([func])里指定排序用的方法),不返回 21 In [53]: ls=[1,4,2,7,3] 22 In [54]: ls.sort() 23 In [55]: ls 24 Out[55]: [1, 2, 3, 4, 7]
注意:以上不返回的函数和方法就是对列表本身做修改,不会生成新的列表,这里一定要注意!
在python3.6中,赋值和copy方法是一样的:
1 In [80]: ls=[1,2,3] 2 // 赋值 3 In [81]: ls_=ls 4 // copy方法 5 In [82]: ls_c=ls.copy() 6 7 In [83]: ls_ 8 Out[83]: [1, 2, 3] 9 In [84]: ls_c 10 Out[84]: [1, 2, 3] 11 12 // 改变ls本身的值 13 In [85]: ls=[1,2] 14 15 // 两者皆不改变 16 In [86]: ls_ 17 Out[86]: [1, 2, 3] 18 In [87]: ls_c 19 Out[87]: [1, 2, 3]
我本地的python2.7结果和以上是一样的。
注意:在python2中有cmp(list1,list2)函数,可以比较两个列表是否相等,但是在python3中没有这个函数
1 // python2.7中 2 >>> cmp([1,2,3],[4,5,6]) 3 -1 4 >>> cmp([1,2,3],[1,2,3]) 5 0 6 7 // python3.6中 8 In [100]: cmp([1,2,3],[4,1,2]) 9 --------------------------------------------------------------------------- 10 NameError Traceback (most recent call last) 11 <ipython-input-100-5bb17d70d0be> in <module>() 12 ----> 1 cmp([1,2,3],[4,1,2]) 13 14 NameError: name 'cmp' is not defined
4、元组
元组的操作和列表基本一致,需要注意的几个地方是:
元组的创建是 ” () “,列表的创建是 ” [] “, 列表只有一个元素时创建没有问题,但是如果元素只有一个元素,需要在元素后加”,“,否则会被认为只是一个元素本身,元组的创建可以不加” () “;
1 // 加括号创建 2 In [101]: tp=(1,2,3) 3 In [102]: tp 4 Out[102]: (1, 2, 3) 5 6 // 不加括号创建 7 In [103]: tp=1,2,3 8 In [104]: tp 9 Out[104]: (1, 2, 3) 10 11 // 只有一个元素且不加逗号,不会被识别为元组 12 In [105]: tp=(1) 13 In [106]: type(tp) 14 Out[106]: int 15 16 // 只有一个元素但是加逗号,会被识别成元组 17 In [107]: tp=(1,) 18 In [108]: type(tp) 19 Out[108]: tuple
除上述不同之外,元组和列表的访问、截取、操作符和函数都是一样的,元组没有更新、添加和删除元素的操作,但是可以删除元组本身,和list的删除一样;
1 In [109]: del tp 2 In [110]: tp 3 --------------------------------------------------------------------------- 4 NameError Traceback (most recent call last) 5 <ipython-input-110-6fc78332fdd4> in <module>() 6 ----> 1 tp