Python 中所有序列都可以进行一些特定操作,包括索引(indexing)、分片(slicing)、序列相加(adding)、乘法(multiplying)、成员资格、长度、最小值和最大值。
序列是被排成一列的对象(或事件),它是Python中最基本的数据结构。序列中的每个元素都分配一个数字, 代表它在序列中的位置(索引),第一个索引是0,第二个索引是1,以此类推。 另外,序列还可以倒数,-1代表最后一个。可像下面这样使用编号来访问各个元素:
greeting = 'Hello'
greeting[0]
'H'
greeting[-1]
'o'
切片,顾名思义,就是对序列进行切割,要想要的元素。切片操作的语法格式:[start:stop:step]。
- start(开始索引):第一个索引的值是 0,最后一个是 -1。
- stop(结束索引):切片操作符将取到该索引为止,但不包含该索引的值。
- step(步长):默认是 1,也就是说,一个接一个切取。如果为 2,则表示隔一取一。步长为正数时,表示从左向右取;如果为负数,表示从右向左取;步长不能为0。
tag=['q', 'u', 'i', 'w', 'p', 'o', 'q', 'u', 'i', 'c', 'k', 's', 't', 'a', 'r', 't', 's', 'p', 'a', 't', 'i', 'a', 'l', 'i', 't', 'e', 'q', 'u', 'i', 'c', 'k', 's', 't', 'a', 'r', 't', 'n', 'e', 'w', 'p', 'o']
tag[32:-4]
['t', 'a', 'r', 't', 'n']
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers[0:6]
[1, 2, 3, 4, 5, 6]
numbers[-3:-1]
[8, 9]
可以将冒号后面的索引空着,代表文件的最后:
numbers[-3:]
[8, 9, 10]
也可以将冒号前面的索引空着,代表文件的开头:
numbers[:3]
[1, 2, 3]
实际上,要复制整个序列,可将两个索引都省略。
numbers[:]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers[3:6:3]
[4]
numbers[10:0:-2]
[10, 8, 6, 4, 2]
numbers[5::-2]
[6, 4, 2]
numbers[:5:-2]
[10, 8]
可使用加法运算符来拼接序列。
[1, 2, 3] + [4, 5, 6]
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6]
'Hello,' + 'world!'
'Hello,world!'
# [1, 2, 3] + 'world!'
从上述错误消息可知,不能拼接列表和字符串,虽然它们都是序列。一般而言,不能拼接不同类型的序列。
将序列与数x相乘时,将重复这个序列x次来创建一个新序列:
'python' * 5
'pythonpythonpythonpythonpython'
[42] * 10
[42, 42, 42, 42, 42, 42, 42, 42, 42, 42]
空列表是使用不包含任何内容的两个方括号[]
表示的。如果要创建一个可包含10个元素的列表,
但没有任何有用的内容,可像前面那样使用[42]*10
。但更准确的做法是使用[0]*10
,
这将创建一个包含10个零的列表。然而,在有些情况下,可能想使用表示“什么都没有”的值,
如表示还没有在列表中添加任何内容。在这种情况下,可使用None
。在Python中,
None
表示什么都没有。因此,要将列表的长度初始化为10,可像下面这样做:
sequence = [None] * 10
sequence
[None, None, None, None, None, None, None, None, None, None]
程序所示的是在屏幕上打印一个由字符组成的方框。这个方框位于屏幕中央, 宽度取决于用户提供的句子的长度。这些代码看似很复杂, 但基本上只使用了算术运算:计算需要多少个空格、短划线等, 以便将内容显示到正确的位置。
要检查特定的值是否包含在序列中,可使用运算符 in
。它检查是否满足指定的条件,并返回相应的值:
满足时返回 True
,不满足时返回 False
。这样的运算符称为布尔运算符,而前述真值称为布尔值。
下面是一些 in
运算符的使用示例:
permissions = 'rw'
'w' in permissions
True
'x' in permissions
False
users = ['mlh', 'foo', 'bar']
input('Enter your user name: ') in users
subject = '$$$ Get rich now!!! $$$'
'$$$' in subject
True
开头两个示例使用成员资格测试分别检查 'w'
和 'x'
是否包含在字符串变量 permissions
中。
在 UNIX系统中,可在脚本中使用这两行代码来检查对文件的写入和执行权限。
接下来的示例检查 提供的用户名mlh是否包含在用户列表中,
这在程序需要执行特定的安全策略时很有用(在这种情况下,可能还需检查密码)。
最后一个示例检查字符串变量 subject
是否包含字符串 '$$$'
,这 可用于垃圾邮件过滤器中。
注意:相比于其他示例,检查字符串是否包含 '$$$'
的示例稍有不同。一般而言,
运算符 in
检查指定的对象是否是序列(或其他集合)的成员,但对字符串来说,
只有它包含的字符才是其成员或元素,因此下面的代码完全合理:
'P' in 'Python'
True
程序所示的是从用户那里获取一个用户名和一个PIN码, 并检查它们组成的列表是否包含在数据库(实际上也是一个列表)中。 如果用户名-PIN码对包含在数据库中,就打印字符 串'Access granted'。
内置函数len、min和max很有用,其中函数len返回序列包含的元素个数,而min和max分别返回序列中最小和最大的元素。
numbers = [100, 34, 678]
len(numbers)
3
max(numbers)
678
min(numbers)
34
max(2, 3)
3
min(9, 3, 2, 5)
2