1.1 序列概览
- Python包含6中内建序列,分别为列表、元组、字符串、Unicode字符串、buffer对象、xrange对象
1.2 通用序列操作
1.2.1 索引
- 序列中的所有元素都是有编号的,从0开始递增。这些元素可以通过编号分别访问
>>> greeting = 'Hello'
>>> greeting[0]
'H'
- 使用负数索引时,Python会从右边,也就是最后一个元素开始计数,最后一个元素的位置对应的复数编号为-1
>>> greeting[-1]
'o'
- 字符串字面值能够直接使用索引,不需要一个变量引用它们
>>> 'Hello'[1]
'e'
1.2.2 分片
>>> tag = 'I love Python'
>>> tag[2:6]
'love'
>>> tag[2:-7]
'love'
>>> tag[-6:]
'Python'
>>> tag[:6]
'I love'
>>> numbers = [1, 2, 3, 4, 5, 6, 7]
>>> new_numbers = numbers[:]
>>> new_numbers
[1, 2, 3, 4, 5, 6, 7]
>>> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> numbers = [0:10:2]
[1, 3, 5, 7, 9]
>>> number[::4] # 提取每四个元素中的第一个元素
[1, 5, 9]
>>> numbers[8:3:-2] # 当步长设置为负数时反向提取元素,此时开始点的索引必须大于结束点的索引
[9, 7, 5]
1.2.3 序列相加
>>> [1, 2, 3] + [4, 5, 6]
[1, 2, 3, 4, 5, 6]
>>> 'Hello.' + 'world!'
'Hello.world!'
1.2.4
- 用数字x乘以一个序列会生成新的序列,而在新的序列中,原来的序列将被重复x次
>>> 'pthon' * 5
'pythonpythonpythonpythonpython'
>>> [42]*5
[42, 42, 42, 42, 42]
>>> sequence = [None] * 5
>>> sequence
[None, None, None, None, None]
1.2.5 成员资格
- 为了检查一个值是否在序列中,可以使用in运算符,如果该值存在,则返回True,否则,返回False
>>> permissions = 'rw'
>>> 'w' in permissions
True
>>> 'x' in permissions
False
>>> users = ['mlh', 'foo', 'bar']
>>> 'mlh' in users
True
1.2.6 长度、最小值和最大值
- 内建函数len、min、max分别返回序列中所包含元素的数量、序列中最小的元素、序列中最大的元素
>>> numbers = [100, 34, 678]
>>> len(numbers)
3
>>> max(numbers)
678
>>> min(numbers)
34
>>> min(9, 2, 3, 5)
3
1.3 列表
1.3.1 list函数
>>> list('hello')
['H', 'e', 'l', 'l', 'o']
1.3.2 基本的列表操作
- 列表可以使用所有适用于序列的标准操作,例如索引、分片、连接和乘法
- 改变列表:元素赋值
>>> x = [1, 1, 1]
>>> x[1] = 2
>>> x
[1, 2, 1]
>>> names = ['Alice', 'Beth', 'Cecil', 'Dee-Dee', 'Earl']
>>> del names[2]
>>> names
['Alice', 'Beth', 'Dee-Dee', 'Earl']
# 等长赋值
>>> 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]
1.3.3 列表方法
- append,用于在列表末尾追加新的对象(返回修改后的列表)
>>> lst = [1, 2, 3]
>>> lst.append(4)
>>> lst
[1, 2, 3, 4]
>>> ['to', 'be', 'or', 'not', 'to', 'be'].count('to')
2
- extend,在列表的末尾一次性追加另一个序列中的多个值(返回修改后的列表)
>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> a.extend(b)
>>> a
[1, 2, 3, 4, 5, 6]
- index,从列表中找出某个值第一个匹配项的索引位置
>>> knights = ['we', 'are', 'the', 'knights', 'who', 'say', 'ni']
>>> knights.index('who')
4
>>> numbers = [1, 2, 3, 5, 6]
>>> numbers.insert(3, 'four') # 插入位置的索引号为3
>>> numbers
[1, 2, 3, 'four', 5, 6]
- pop,用于移除列表中的一个元素(默认时最后一个),并返回该元素的值
>>> x = [1, 2, 3]
>>> x.pop()
3
>>> x
[1, 2]
>>> x.pop(0)
1
>>> x
[2]
- remove,用于移除列表中某个值的第一个匹配项(无返回值)
>>> x = ['to', 'be', 'or', 'not', 'to', 'be']
>>> x.remove('be')
>>> x
['to', 'or', 'not', 'to', 'be']
>>> x = [1, 2, 3]
>>> x.reverse()
>>> x
[3, 2, 1]
- 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]
1.4 元组:不可变序列
- 元组与列表一样,也是一种序列,唯一的不同时元组不能修改
- 创建元组的语法很简单:如果你用逗号分隔了一些值,那么你就自动创建了元组
>>> 1, 2, 3
(1, 2, 3)
# 另一种创建元组的方法
>>> (1, 2, 3)
(1, 2, 3)
>>> 42 # 不是元组
42
>>> 42, # 是元组
(42,)
>>> (42) # 不是元组
42
>>> (42,) # 是元组
(42,)
1.4.1 tuple函数
>>> tuple([1, 2, 3])
(1, 2, 3)
>>> tuple('abc')
('a', 'b', 'c')
>>> tuple((1, 2, 3))
(1, 2, 3)
1.4.2 基本元组操作
>>> x = 1, 2, 3
>>> x[1]
2
>>> x[0:2] # 元组的分片还是元组
(1, 2)