个人笔记,仅供参考
二、列表和元组
1、序列概述
python内置了多种序列,本章重点讨论其中最常用的两种:列表和元组。另一种重要的序列是字符串。
列表和元组主要的不同在于,列表是可以修改的,而元组不行。所以列表适用于需要中途添加元素的情况,而元组适用于需要禁止修改的情况。
2、通用的序列操作
索引,切片,相加,相乘和成员资格检查
2.1索引
序列中的所有元素都有编号——从0开始递增。可以使用编号来访问各个元素
>>> greeting = 'hello'
>>> greeting[0]
'h'
tips:可以使用负数索引来访问倒数的元素,例如-1可以访问倒数第一个元素
对字符串也可以使用索引:
>>> 'Hello'[1]
'e'
或者函数调用返回序列,可以直接对其执行索引操作。
>>> fourth = input('Year: ')[3]
Year: 2005
>>> fourth
'5'
2.2切片
切片可以访问特定范围内的元素。为此,可使用两个索引,并用冒号分隔
>>> numbers = [1,2,3,4,5,6,7,8,9,10]
>>> numbers[3:6]
[4, 5, 6]
注意:前面索引是包含在切片内的而后面的索引不包含
可以使用一个索引来从头开始或者切到最后
>>> numbers[:6]
[1, 2, 3, 4, 5, 6]
>>> numbers[3:]
[4, 5, 6, 7, 8, 9, 10]
或者省略两个索引来复制整个序列
>>> numbers[:]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
切片操作时可以指定第三个参数——步长
>>> numbers[0:10:2]
[1, 3, 5, 7, 9]
默认的步长为1,这里改为了2,即隔一个元素取一个值
还可以设置负数步长,从右向左提取元素,但索引要反过来写
>>> numbers[8:3:-1]
[9, 8, 7, 6, 5]
>>> numbers[10:0:-2]
[10, 8, 6, 4, 2]
>>> numbers[0:10:-2]
[]
>>> numbers[::-2]
[10, 8, 6, 4, 2]
>>> numbers[5::-2]
[6, 4, 2]
>>> numbers[:5:-2]
[10, 8]
使用这种方法要注意索引
2.3序列相加
可以使用加法运算来拼接序列
>>> [1,2,3] + [4,5,6]
[1, 2, 3, 4, 5, 6]
>>> 'Hello,' + 'world!'
'Hello,world!'
>>> [1,2,3] + 'world'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "str") to list
注意:只有同类型的序列才可以相加
2.4、乘法
>>> 'python' * 5
'pythonpythonpythonpythonpython'
>>> [42] *5
[42, 42, 42, 42, 42]
2.4.1、none、空列表和初始化
空列表是使用不包含任何内容的两个方括号表示的,如果要创建一个10个元素的列表,但没有什么内容,可以使用乘法创建
>>> sequence = [None] * 10
>>> sequence
[None, None, None, None, None, None, None, None, None, None]
2.5成员资格
要检查特定的值是否包含在序列中,可使用运算符in
。
>>> permissions = 'rw'
>>> 'r' in permissions
True
>>> 'x' in permissions
False
2.5.1长度、最小值和最大值
使用内置函数len
、min
、max
。
>>> numbers = [100,34,678]
>>> len(numbers)
3
>>> min(numbers)
34
>>> max(numbers)
678
3、列表:python的主力
3.1、函数list
将参数拆成列表
>>> list('Hello')
['H', 'e', 'l', 'l', 'o']
注意:可以将任何序列作为list的参数
3.2、基本的列表操作
3.2.1、修改列表:给元素赋值
>>> x = [1,1,1]
>>> x[1] = 2
>>> x
[1, 2, 1]
3.2.2、删除元素
使用del语句即可
>>> names = ['Alice','Beth','Cecil','Dee-Dee','Earl']
>>> del names[2]
>>> names
['Alice', 'Beth', 'Dee-Dee', 'Earl']
del语句还可用于删除其他东西
3.2.3给切片赋值
>>> name = list('perl')
>>> name
['p', 'e', 'r', 'l']
>>> name[2:] = list('ar')
>>> name
['p', 'e', 'a', 'r']
由以上代码可知,可同时给多个元素赋值。切片赋值可将切片替换为长度与其不同的序列,如下:
>>> name = list('Perl')
>>> name[1:] = list('ython')
>>> name
['P', 'y', 't', 'h', 'o', 'n']
使用切片赋值还可以在不替换原有元素的情况下插入新元素
>>> numbers = [1,5]
>>> numbers[1:1] = [2,3,4]
>>> numbers
[1, 2, 3, 4, 5]
这里,我“替换”了一个空切片,相当于插入了一个序列。可以使用相反的措施来删除切片
>>> numbers
[1, 2, 3, 4, 5]
>>> numbers[1:4] = []
>>> numbers
[1, 5]
4、列表方法
4.1、append()
方法append可以将一个对象添加到列表末尾
>>> lst = [1,2,3]
>>> lst.append(4)
>>> lst
[1, 2, 3, 4]
4.2、clear
方法clear就地清空列表
>>> lst = [1,2,3]
>>> lst.clear()
>>> lst
[]
4.3、copy
方法copy复制列表。常规复制只是将另一个名称关联到列表,而copy则是创建副本
>>> a = [1,2,3]
>>> b = a
>>> b[1] = 4
>>> a
[1, 4, 3]
如上,常规方法会动原列表
>>> a = [1,2,3]
>>> b = a.copy()
>>> b[1]=4
>>> a
[1, 2, 3]
4.4、count
方法count计算指定的元素在列表中出现了多少次。
>>> x = [[1,2],1,1,[2,1,[1,2]]]
>>> x.count(1)
2
>>> x.count([1,2])
1
4.5、extend
用于同时将多个值附加到列表末尾,可将这些值组成序列当作参数
>>> a = [1,2,3]
>>> b = [4,5,6]
>>> a.extend(b)
>>> a
[1, 2, 3, 4, 5, 6]
注意,常规的加法效果不一样
>>> a = [1,2,3]
>>> b = [4,5,6]
>>> a + b
[1, 2, 3, 4, 5, 6]
>>> a
[1, 2, 3]
这里a没有被修改
4.6、index
方法index在列表中查找指定值第一次出现的索引
>>> knights = ['we','are','the','knights','who','say','ni']
>>> knights.index('who')
4
搜索列表中没有的值会报错
4.7、insert
方法insert用于将一个对象插入列表
>>> numbers = [1,2,3,4,5,6,7]
>>> numbers.insert(3,'four')
>>> numbers
[1, 2, 3, 'four', 4, 5, 6, 7]
4.8、pop
pop从列表中删除一个元素,并返回这一元素。
>>> x = [1,2,3]
>>> x.pop()
3
>>> x
[1, 2]
>>> x.pop(0)
1
>>> x
[2]
>>> x = [1,2,3]
>>> x.append(x.pop())
>>> x
[1, 2, 3]
4.9、remove
方法remove用于删除第一个为指定值的元素
>>> x = [1,2,3,4,5]
>>> x.remove(1)
>>> x
[2, 3, 4, 5]
4.10、reverse
方法reverse按相反的顺序排列列表中的元素
>>> x = [1,2,3]
>>> x.reverse()
>>> x
[3, 2, 1]
4.11、sort
sort用于对列表就地排序,会对原来的列表进行修改。
>>> x = [4,6,2,1,7,9]
>>> x.sort()
>>> x
[1, 2, 4, 6, 7, 9]
为获取排序后的列表的副本,使用函数sorted
>>> x = [4,6,2,1,7,9]
>>> y = sorted(x)
>>> x
[4, 6, 2, 1, 7, 9]
>>> y
[1, 2, 4, 6, 7, 9]
这个函数可用于任何序列,但总是返回一个列表
>>> sorted('python')
['h', 'n', 'o', 'p', 't', 'y']
5、元组:不可修改的序列
>>> 1,2,3
(1, 2, 3)
如你所见,元组用圆括号括起。
注意:即使只有一个值,也要使用逗号
函数tuple可以将一个序列转换为元组。
>>> tuple([1,2,3])
(1, 2, 3)
6、小结
函数 | 描述 |
---|---|
len(seq) | 返回序列的长度 |
list(seq) | 将序列转换为列表 |
max(args) | 返回序列或一组参数中的最大值 |
min(args) | 返回序列或一组参数中的最小值 |
reversed(seq) | 让你能反向迭代序列 |
sorted(seq) | 返回一个有序列表,其中包含指定序列的所有元素 |
tuple(seq) | 将序列转换为元组 |
列表和元组都是python开发中使用频繁的序列,此内容需完全掌握。