列是指有序的队列,重点在"有序"。
一、Python中序列的分类Python中的序列主要以下几种类型:
3种基本序列类型(Basic Sequence Types):list、tuple、range
专门处理文本的附加序列类型(Text Sequence Types):str
专门处理二进制数据的附加序列类型(Binary Sequence Types): bytes、bytearray、memoryview
按照序列是否可被改变分类:
可变序列: list
不可变序列:tuple、str
二、Python中序列支持的操作 1.通用序列操作这里说的通用序列操作是指大部分可变序列与不可变序列都支持的操作。一般操作包括 增、删、改、查,但是这里说的是包括不可变序列也支持的通用操作,因此只能是“查”操作。
符号说明:
符号说明s,t 表示相同类型的序列
n,i,j,k 表示整数数值
x 表示序列s中满足条件约束的任意类型的元素
in(被包含) 和 not in 具有与比较操作相同的优先级
+(连接)和*(重复) 具有与相应数字操作相同的优先级。
序列通用操作及结果说明:
操作结果x in s 如果序列s中包含x对象则返回True,否则返回False
x not in s 如果序列s中不包含x对象则返回True,否则返回True
s + t 对序列s和序列t做连接操作
s * n 或 n * s 等价于 n个s相加
s[i] 表示序列s的第i个元素,i初始值为0
s[i:j] 序列s从下标i到下标j的切片(包含s[i],但不包含s[j])
s[i:j:k] 序列s从下标i到下标j的切片,且步长为k
len(s) 序列s的长度
min(s) 序列s中的最小值
max(s) 序列中的最大值
s.index(x[, i[, j]]) x在序列s中从下标i开始到下标j之前范围内第一次出现的位置
s.count(x) x在序列s中出现的总次数
说明:
a) 对于序列来说,其元素的数字类型是不做严格区分的,如True=1=1.0,False=0=0.0;
b) 相同类型的序列也支持比较操作,特别是tuple和list是通过比较对应元素的字典顺序来进行比较的。这意味着要判断两个序列相等,就需要这两个序列中的每个元素都相等,并且这两个序列必须是相同类型且长度相等。
注意:
a) 虽然in 和 not in操作只用于一般情况下的简单容器测试,但一些专用序列(如str,bytes和bytearray)也用于子序列测试。
>>> "ll" in "hello" Trueb) 如果s * n中n小于0,则n会被当做0看待;s * 0的结果是产生一个与s相同类型的空序列。
>>> "ss" * -2 '' >>> ["Tom", "Peter", "Jerry"] * -2 [] >>> ("Tom", "Peter", "Jerry") * -2 ()c) 对于s * n操作,s序列中的元素没有被复制,他们只是被引用了多次。
>>> lists = [['a']] * 3 >>> lists [['a'], ['a'], ['a']] >>> lists[0].append('b') >>> lists [['a', 'b'], ['a', 'b'], ['a', 'b']]d) 对于序列的切片操作s[i:j[:k]],如果i或j负数,则索引是相对于字符串的尾部来计算的。如果i是负数,则i相当于len(s)+i,如果j是负责,则j相当于len(s)+j。
>>> [0,1,2,3,4,5,6,7,8,9][-1] 9 >>> [0,1,2,3,4,5,6,7,8,9][-5:-1] [5, 6, 7, 8] >>> [0,1,2,3,4,5,6,7,8,9][1:-1] [1, 2, 3, 4, 5, 6, 7, 8]e) 还是对于序列的切片操作s[i:j[:k]],其中i与j的值有如下几种情况:
如果i或j为负数,则先替换为len(s)+i或len(s)+j再进行如下比较;
如果i或j大于len(s),则其值取len(s);
如果i被忽略或为None,则其值取0;
如果j被或略或为None,则其值取len(s);