python中,序列类型有str、bytes、 bytearray、 list、 tuple、 range。所谓序列,说明是有序的,可以通过索引做一些特定的操作。首先先了解序列对象中比较重要的两个:str 和 list,然后探讨下序列对象的共有操作。
字符串:str
Python中的文本数据由str对象或字符串处理。 字符串是Unicode编码(从python3开始)的不可变序列。可以通过把字符序列通过单引号、双引号、三引号来创建字符串。例如:
# Python 3.5.3 >>> test = "Hello\tworld!"
>>> print(test)
Hello world!>>>test'Hello\tworld!'
#字符串中可以包含任何unicode编码中包含的字符。'\t'是转义字符,在打印输出中显示为多个空格(具体几个由操作环境决定)
# 在交互模式下直接输变量名,显示更能体现字符串在python中的存储方式
>>> d = r'c:\windows\sys\table'
>>>d'c:\\windows\\sys\\table'
# 'r'前缀,'raw'的缩写,会使大部分的转义失效
>>> sql = """select * from user where name='tom'"""
>>>sql"select * from user where name='tom'"
# 可以在三引号中方便的使用单双引号
# 使用三引号可以方便的横跨多行,任何空白字符都会被包含到字符串中。
字符串是可迭代的。
列表:list
列表是可变的序列,通常用于存储同类数据的集合,不过一个列表中可以存储任意不同类型的数据。
列表可以通过不同的方式创建:
使用一对方括号来表示空列表:[]
使用一对方括号,括号中的元素用逗号隔开: [a, b, c]
使用列表解析式:[x for x in iterable]
使用列表的类型构造函数:list() 或 list(iterable)
构造函数创建一个列表,其元素和作为参数的可迭代对象完全相同,元素的顺序也相同。可迭代对象可以是序列、支持迭代的容器或者一个可迭代对象。如果可迭代对象是一个列表,返回一个该列表的拷贝,功能类似于iterable[:]。如果没有参数,构造函数创建一个新的空列表,[]。
>>> lst = [1,2,3]>>> cp =list(lst)>>>cp
[1, 2, 3]>>> lst iscp
False
以下内容翻译自 file:///Library/Frameworks/Python.framework/Versions/3.5/Resources/English.lproj/Documentation/library/stdtypes.html#sequence-types-list-tuple-range
公共的序列操作
下面表中列出的操作适用于所有的序列类型,不论是可变序列还是不可变序列。
表中的操作是按优先级升序排列的。在表中,s和t是同一种序列类型,n,j,i,k表示整数,x是一个满足s所施加的任何类型和值限制任意对象。作为比较操作,in 和 not in 具有相同的优先级。
OperationResultNotes
x in s
True如果序列s中的某个元素等于x, 否则False
(1)
x not in s
False 如果序列s中的某个元素等于x, 否则True
(1)
s + t
将s 和 t串联,返回一个新的序列
(6)(7)
s * n or n * s
相当于将s自身相加n次
(2)(7)
s[i]
序列s的第i个元素,索引从0开始
(3)
s[i:j]
s的第i到j个元素,包含第i个元素,不包含第j个元素
(3)(4)
s[i:j:k]
分片操作,每隔k个元素取s的第i到j个元素的一个元素
(3)(5)
len(s)
s序列的长度
min(s)
序列s中最小的元素
max(s)
序列s中最大的元素
s.index(x[, i[, j]])
在s中出现的第一个x元素的索引 (i及i索引之后,j索引之前)
(8)
s.count(x)
x在s中出现的总次数
相同的列表类型支持比较。实际上,元组和列表通过比较对应索引位置的元素进行。也就是说,如果两个列表或者元组对象相等,那么它们的长度需要相同并且每一个元素必须相等。
注释:
in 和 not in操作一般只用于普通的包含测试, 一些特殊的序列,例如str、bytes、bytearray也将它们用于子序列测试:
>>> "gg" in "eggs"True
小于0的值当作0对待 (产生一个和s序列类型相同的空序列)。需要注意的是序列s中的元素没有被拷贝,它们只是被引用多次。
>>> lists = [[]] * 3
>>>lists
[[], [], []]>>> lists[0].append(3)>>>lists
[[3], [3], [3]]
[[]]是一个包含了一个空列表的元素的列表,所以通过 [[]] * 3 产生的三个元素都引用同一个空列表。所以修改列表中的任意一个元素其实修改的是同一个列表。可以通过下面的方式创建一个包含不同列表元素的列表:
>>> lists = [[] for i in range(3)]>>> lists[0].append(3)>>> lists[1].append(5)>>> lists[2].append(7)>>>lists
[[3], [5], [7]]
如果i或j是负的,那么索引是相对于列表s末尾的,被替换为:len(s) + i 或 len(s) + j。但是-0还是0.