python的标准类型如字符串(str)、表(list)、元组(tuple)都是序列类型,但又各有不同:
I 元素类型不同:表和元组可以以任何对象为元素,而字符串对象的元素只能是字符;
II 建立后是否可以修改:分为可变(mutable)与不变(immutable)两种类型。表list是可变类型,字符串str与元组tuple是不变类型;
python把list、tuple、str归类为序列类型,不仅因为它们的一些共用性质,还因为它们都定义了一批公共操作。下表的一组操作(操作符、标准函数、对象方法)由所有序列类型所共用,不论其可变与否。
sn | 表达式 | 说明 |
s、t 表示序列; | ||
x 表示对象; | ||
n 表示自然数(从0开始的非整数); | ||
i、j 表示整数下标; | ||
1 | x in s | s有元素等于x则结果为True,否则为False |
2 | s not in s | s有元素等于x则结果为False,否则为True |
3 | s + t | s和t的拼接序列 |
4 | s*n 或 n*s | s的n个拷贝的拼接 |
5 | s[i] | s的第i个元素,从0开始计 |
6 | s[i:j] | s的切片,从下标i到j的一段做出的序列,左闭右开的序列; |
7 | s[i:j:k] | 同上,且按步长k取元素 |
8 | len(s) | s的长度 |
9 | min(s) | s的最小元素 |
10 | max(s) | s的最大元素 |
11 | s.index(x[,i[,j]]) | x在s里首次出现的下标,i、j表示起始、结束位置 |
12 | s.count(x) | x在s里出现的次数 |
上表的补充说明:
1 s.index方法描述中的[]表示可选,也就是说,这个方法有三种可用形式:
1.1 s.index(x)返回x在s中第一次出现的下标;
1.2 s.index(x,i)中的i表示从i开始查找;
1.3 s.index(x,i,j)中的i,j表示查找的范围;
2 操作符in和not in,对于字符串类型,检查x是否为s的子序列;而对于其他序列,则是检查是否是序列的元素;
3 下标i和j是负值时表示要求从后向前确定匹配的位置;
4 对于切片操作,其中的i、j、k都可以省略,但 冒号必须保留;i的缺省值是0,j的缺省值是序列的长度,k的缺省值是1;
5 对表list的操作(拼接、拷贝拼接和切片)的结果是list,tuple操作的结果还是tuple;
上表的操作实例↓
(关于可变序列的操作请见后续文章:python3.5|可变(mutable)序列列表list支持的操作及简单实例)
附源码:
s = (1,1,2,3,5,8,13,21,34,55) # 构造元组
t = (89,144,233) # 构造元组
str = 'This is a test of python' # 构造字符串
n = 3
x = 8
print(x in s) # 判断元素x是否存在
print(x not in s) # 判断元素x是否不存在
s2 = s + t # s和t的拼接序列
print(s2)
print(t * n) # t的n个拷贝的拼接
'''
True
False
(1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233)
(89, 144, 233, 89, 144, 233, 89, 144, 233)
'''
print(s[n]) # s的第n个元素,从0开始计
s3 = s2[3:6] # s2的切片,从下标i到j的一段做出的序列(左闭右开)
print(s3)
s4 = s2[3::3] # s2的切片,按步长k取元素
print(s4)
'''
3
(3, 5, 8)
(3, 13, 55, 233)
'''
print(len(s2)) # s2的长度
print(min(s2)) # s2的最小元素
print(max(s2)) # s2的最大元素
print(s2.count(1)) # 1在s2里出现的次数
print(str.count('t')) # t在str里出现的次数
'''
13
1
233
2
3
'''
print(s2.index(55)) # 55在s2里首次出现的下标
print(s2.index(1)) # 1在s2里首次出现的下标
print(s2.index(1,1)) # 从下标1开始,1在s2里首次出现的下标
print(str.index('is',3)) # 从下标3开始,is在str里首次出现的下标
'''
9
0
1
5
'''
# s5 = s.copy() # tuple没有copy属性
# s5 = str.copy() # str没有copy属性
# 但tuple和list能够支持拷贝拼接和直接赋值操作
s8 = s * 1 # s8的1个拷贝的拼接
s9 = s # s9新建,值为s的值
print(s8,'\n',s9)
'''
(1, 1, 2, 3, 5, 8, 13, 21, 34, 55)
(1, 1, 2, 3, 5, 8, 13, 21, 34, 55)
'''
-End-