本节向您介绍一些序列通用的操作。
下表列出了对所有序列类型都适用的操作符。操作符是按照优先级从高到底的顺序排列的。
操作符 | 说明 |
---|---|
len(seq) | 获得序列的长度 |
seq[index] | 获得下标为index 的元素 |
seq[index1:index2] | 获得下标从index1 到index2 间的元素集合 |
seq * expr | 序列重复expr 次 |
seq1 + seq2 | 连接序列seq1 和seq2 |
obj in seq | 判断obj 元素是否包含在seq 中 |
obj not in seq | 判断obj 元素是否不包含在seq 中 |
获得序列的长度len(seq)
序列的长度可以通过len()函数来获取,例如:
len((1, 2, 3, 4, 5)) # 输出5
成员关系操作符(in | not in)
成员关系操作符使用来判断一个元素是否属于一个序列的。比如对字符串类型来说,就是判断一个字符是否属于这个字符串,对和元组类型来说,就代表了一个对象是否属于该对象序列。
in | not in 操作符的返回值一般来讲就是true或false,满足成员关系就返回true,否则返回false。该操作符的语法如下:
obj in sequence
obj not in sequence
连接操作符(+)
链接操作符允许我们把一个序列和另一个相同类型的序列做连接。语法如下:
sequence1 + sequence2
该表达式的结果是一个包含sequence1 和sequence2 的内容的新序列。
注意,这种方式看起来似乎实现了把两个序列内容合并的概念,但是这个操作不是最快或者说最有效的。对字符串来说,这个操作不如把所有的子字符串放到一个列表或可迭代对象中,然后调用一个join方法来把所有的内容连接在一起节约内存;类似地,对列表来说,我们推荐您用列表类型的extend()方法来把两个或者多个列表对象合并。当你需要简单地把两个对象的内容合并,或者说不能依赖于可变对象的那些没有返回值(实际上它返回一个None)的内建方法来完成的时候时,连接操作符还是很方便的一个选择。
重复操作符(*)
当你需要需要一个序列的多份拷贝时,重复操作符非常有用,它的语法如下:
sequence * copies_int
copies_int 必须是一个整数(不能是长整数),像连接操作符一样,该操作符返回一个新的包含多份原对象拷贝的对象。
重复操作符举例:
names = (1, 2, 3) print(names * 3)
输出:
(1, 2, 3, 1, 2, 3, 1, 2, 3)
切片操作符([ ] | [:])
简单地讲,所谓序列类型就是包含一些顺序排列的对象的一个结构。你可以简单的用方括号加一个下标的方式访问它的每一个元素,或者通过在方括号中用冒号把开始下标和结束下标分开的方式来访问一组连续的元素。
序列类型是其元素被顺序放置的一种数据结构类型,这种方式允许通过指定下标的方式来获得某一个数据元素,或者通过指定下标范围来获得一组序列的元素。这种访问序列的方式叫做切片。
访问某一个数据元素的语法如下:
sequence[index]
sequence 是序列的名字,index 是想要访问的元素对应的下标。下标可以是正值,范围从0 到最大值(比序列长度少一)。
另外,也可以使用负索引,范围是 -1 到序列的负长度。正负索引的区别在于正索引以序列的开始为起点,负索引以序列的结束为起点。
切片操作举例:
names = ('Faye', 'Leanna', 'Daylen', 'Tom', 'Kime', 'Tim') print(names[4]) print(names[-2]) print(names[1:3]) print(names[-4:-2]) print(names[:4]) print(names[1:]) print(names[:-1]) print(names[-4:])
输出:
Kime
Kime
(‘Leanna’, ‘Daylen’)
(‘Daylen’, ‘Tom’)
(‘Faye’, ‘Leanna’, ‘Daylen’, ‘Tom’)
(‘Leanna’, ‘Daylen’, ‘Tom’, ‘Kime’, ‘Tim’)
(‘Faye’, ‘Leanna’, ‘Daylen’, ‘Tom’, ‘Kime’)
(‘Daylen’, ‘Tom’, ‘Kime’, ‘Tim’)