列表和元组
列表和元组都属于序列类型(sequence)。序列对象中的元素都是有序存放的,可以通过编号访问其元素。两者最大的区别在于列表是一种可变序列支持修改其元素,而元组是一种不可变序列,不能修改其元素。
列表
列表(list)是一种可变序列。列表用方括号定义,元素间用逗号隔开。列表的元素可以是任意的数据类型(数字字符串,列表,元组,字典,都可以作为其元素)。
列表的创建
>>> list1=['a','b','c','d','e','f']
>>> list1
['a', 'b', 'c', 'd', 'e', 'f']
>>> list2=[1,2,3,'a','efg']
>>> list2
[1, 2, 3, 'a', 'efg']
>>> temp = list('beixifen666') #将字符串转换为列表
>>> temp
['b', 'e', 'i', 'x', 'i', 'f', 'e', 'n', '6', '6', '6']
>>> a=(1,2,3) #将元组转换为列表
>>> b=list(a)
>>> b
[1, 2, 3]
这里说明list1的元素与位置编号的关系
正位置编号 0 1 2 3 4 5
列表元素 a b c d e f
负位置编号 -6 -5 -4 -3 -2 -1
列表的基本操作
>>> list1=['a','b','c','d','e','f']
>>> list2=[1,2,3,'a','efg']
>>> list1[5] #正数索引
'f'
>>> list1[-1] #负数索引
'f'
>>> list3=list1+list2 #列表相加
>>> list3
['a', 'b', 'c', 'd', 'e', 'f', 1, 2, 3, 'a', 'efg']
>>> list4=[list1,list2] #列表的嵌套
>>> list4
[['a', 'b', 'c', 'd', 'e', 'f'], [1, 2, 3, 'a', 'efg']]
>>> list4[1][4] #索引嵌套列表元素
>>> list1[0]=1 #对列表元素修改或者赋值(前面说过列表元素是可变的)
>>> list1
[1, 'b', 'c', 'd', 'e', 'f']
>>> del list1[0] #删除列表的第一个元素
>>> list1
['b', 'c', 'd', 'e', 'f']
列表对象的基本方法
当我们定义了一个列表时,实际上创建了一个列表对象。对于列表对象,我们可以调用该对象的内置基本方法。
调用对象方法的格式如下:
list.method()
1、添加元素append
append是向结尾添加一个元素。
>>> list1=['a', 'b', 'c', 'd', 'e', 'f']
>>> list1
['a', 'b', 'c', 'd', 'e', 'f']
>>> list1.append('g') #append用法
>>> list1
['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> list1.append('h','i') #用append添加多个时会报错
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: append() takes exactly one argument (2 given)
2、添加多个元素extend
extend可以向列表尾部添加多个元素。添加的时候将待添加元素写成序列形式。
>>> list1=['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> list1.extend(['a','b']) #以列表形式添加多个元素
>>> list1
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'a', 'b']
>>> list1.extend(('a','b')) #以元组形式添加多个元素
>>> list1
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'a', 'b']
>>> list1.extend('abc') #以字符串形式添加多个元素
>>> list1
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'a', 'b', 'a', 'b', 'c']
>>> list1.extend(['abc']) #添加字符串
>>> list1
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'a', 'b', 'a', 'b', 'c', 'abc']
>>> list1.extend('a','b')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: extend() takes exactly one argument (2 given)
3、插入元素insert
insert是向列表中插入元素。格式:list.insert(位置编号,元素)
>>> a = [1,2,3]
>>> a.insert(1,'b') #在索引为1的位置插入'b'
>>> a
[1, 'b', 2, 3]
>>> b=['c','d'] #在索引为1的位置插入列表b
>>> a.insert(1,b)
>>> a
[1, ['c', 'd'], 'b', 2, 3]
4、计数count
count是统计某个元素在列表中的出现次数。
>>> list1=['a', 'b', 'c', 'd', 'e', 'f']
>>> list1.count('a')
1
5、索引index
index是检测出列表中第一个匹配项的位置。
>>> temp = list('beixifen666') #将字符串转换为列表
>>> temp
['b', 'e', 'i', 'x', 'i', 'f', 'e', 'n', '6', '6', '6']
>>> temp.index('6') #第一个'6' 的索引
8
>>> temp[8]
'6'
6、弹出元素pop
pop是将列表中一个元素删除类似于del。格式为:list.pop(位置编号),当位置编号省缺时,默认弹出列表末尾的元素。
>>> a = [1,2,3]
>>> a.pop(1)
2
>>> a
[1, 3]
7、移除第一个匹配项remove
remove的作用是检索给定的元素是否在列表内,如果在则移除第一个匹配项。格式:list.remove(元素)。
>>> a=[1,2,3,1]
>>> a.remove(1)
>>> a
[2, 3, 1]
8、逆转reverse
reverse将列表元素逆序。
>>>a = ['a', 'b', 'c']
>>>a.reverse()
['c', 'b', 'a']
9、排序sort
sort默认排序时,按照升序排列原列表的元素。当出现多种字符时按照:数字→大写字母→小写字母排序。
格式:默认排序:list.sort() 逆序排序:list.sort(reverse=True)
>>> x.sort() #默认排序
>>> x
['5', 'Acd', 'abc', 'bac']
>>> x.sort(reverse=True) #逆序排序
>>> x
['bac', 'abc', 'Acd', '5']
元组
元组(tuple)是一种不可变序列类型。元组用圆括号定义,元素间用逗号隔开。再不引起语法错误的前提下,一组用逗号隔开的值,系统默认创建元组。或者说元组的定义在某些情况下可以没有圆括号。
元组的基本操作
>>> tuple1=('a','b','c','d') #圆括号定义元组
>>> tuple1
('a', 'b', 'c', 'd')
>>> tuple2=1,2,'a' #系统默认定义元组
>>> tuple2
(1, 2, 'a')
>>> x=['bac', 'abc', 'Acd', '5'] #列表转为元组
>>> a=tuple(x)
>>> a
('bac', 'abc', 'Acd', '5')
>>> b=tuple('acbfe') #字符串转为元组
>>> b
('a', 'c', 'b', 'f', 'e')
>>> tuple2[1] #元组元素的引用
2
>>> tuple3=tuple1+tuple2 #元组元素相加
>>> tuple3
('a', 'b', 'c', 'd', 1, 2, 'a')
>>> tuple1[2]=1 #企图改变元组的元素,元组是不可变的序列因此会报错
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> a=tuple('beixifen') #元组的分片
>>> a[0:4]
('b', 'e', 'i', 'x')
由于元组是不可变序列因此比起列表会少很多内置方法。元组可以使用index和count方法,用法同列表。
参考文献:秦颖.Python实用教程.北京:清华大学出版社,2016.