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.