序列是Python的一种数据结构,其特征是每个元素都被分配一个序号,可以通过这个序号访问其中的每一个元素。
Python有六种序列:列表、元组、字符串、Unicode字符串、buffer对象、xrange对象。不同的序列有不同的具体操作方式,但也有一些通用的操作,包括:
操作 | 描述 |
---|---|
X1+X2 | 连接序列,生成新序列 |
X*n | 序列重复n次,生成新序列 |
X[i:j:k] | 提取元素,可生成新序列 |
len(X) | 计算序列的元素个数 |
max(X), min(X) | 序列的最大值/最小值 |
v in X, v not in X | 判断元素是否在序列中 |
1. 序列的访问
序列可以访问单个数据和一组数据。
访问序列单个数据的语句是X[i],i是序列中的序号。序列的序号有两种,第一种是正数序号,一种是负数序号。正数序号以第一个元素序号为0,后面元素依次递增;负数序号以最后一个元素序号为-1,前面元素依次递减。两种序号可以同时使用。当给序列提供不存在的下标时,会发生运行错误。
prompt = 'hello'
print(prompt[0])
h
print(prompt[-1])
o
访问序列一组数据的语句是X[i:j:k],也叫做切片。i表示访问的第一个元素的序号,省略时表示从序列的第一个元素开始(省略时其后的冒号不能省略);j表示访问的最后一个元素的后一个元素的序号,也就是不包括序号为j的元素,省略时表示在序列最后一个元素结束;k表示步长,省略时表示步长为1(省略时其前的冒号也省略)。k可以为负数,负数表示从后往前访问序列。
a = [2,3,4,7,11,13]
print(a[1:3])
[3,5]
print(a[1:-3])
[3,5]
print(a[-3:]
[7,11,13]
print(a[-1,0,-1])
[13,11,7,4,3]
print(a[::-1])
[13,11,7,4,3,2]
一般还可以用切片的方式复制一个序列。事实上,如果仅仅用赋值的方式,并不能达到复制序列的效果,两个变量指向同一个序列:
b = a
b[0] = 1
print(a)
[1,3,4,7,11,13]
此时,a和b指向同一个序列,修改其中一个相当于修改另外一个。如果希望得到复制的效果,让两个变量各自拥有独立的序列,可以用切片的方法。
b = a[:]
b[0] = 3
print(a)
[1,3,4,7,11,13]
print(b)
[3,3,4,7,11,13]
序列的连接与重复
可以用 ‘+’ 连接两个序列。
a = [2,3,5,7,11,13]
b = [4,6,8,9,10,12]
print(a+b)
[2,3,4,7,11,13,4,6,8,9,10.12]
'hello '+'world'
'hello world'
可以用 ‘*’将一个序列重复若干遍
[4,0,4]*3
[4,0,4,4,0,4,4,0,4]
检查数据是否在序列中
可以用 in 判断某个数据是否在序列中,返回True或False。
a = [2,3,5,7,11,13]
print(3 in a)
True
注意,对于列表,只能用 in 检查单个数据是否在列表中。比如
a = [2,3,5,7,11,13]
[2,3] in a
False
但对于字符串来说,情况则不同。
s = 'hello'
print('he' in s)
True
因此,可以用 in 判断某个字符串是否为另一个字符串的一部分。
计算序列的长度和最值
可以用len()函数返回序列中数据的个数。
len([2,3,5,7])
4
len('hello world')
11
可以用min()和max()函数找出序列中数据的最小值和最大值。如果序列的数据为数字,则比较数字的大小。如果序列的数据为字符串,则比较字符的Unicode编码。
min('好好学习天天向上')
'上'
min(['apple','orange','melon'])
'apple'
’上‘的Unicode编码最小,a的Unicode编码比’o’和’m’都小。