在python之中提供了主要一下几种序列类型:
按照序列是否可以被改变的分类
注
1、其中Python2.x特有的序列类型
unicode, buffer, xrange
2、其中Python3.x特有的序列类型
bytes, range
下表就是大部分序列类型所支持的操作,包括可变类型和不可变类型。
其中s和t是同一种序列类型,n,i,j,k是整数类型,x是一个任意对象。
No | 操作(Operation) | 描述(Description) |
---|---|---|
1 | x in s | 如果s中的某项等于x,返回True,否则返回False |
2 | x not in s | 如果s中的某项等于x,返回False,否则返回True |
3 | s + t | s和t序列的拼接 |
4 | s * n or n * s | 等价于s拼接n次 |
5 | s[i] | s中的第i个元素,起始位置是0 |
6 | s[i:j] | 取得第i项到第j项(不包括j)的切片 |
7 | s[i:j:k] | 取得以步长为k的第i项到第j项的切片 |
8 | len(s) | 取得s的长度 |
9 | min(s) | 获得s中最小值 |
10 | max(s) | 获得s中最大值 |
11 | s.index(x[,i[,j]]) | 取得第一次出现x(在[i,j)之间)的索引 |
12 | s.count(x) | 取得x在s中出现的总数 |
Python官网原文
可以用in或not in 来进行子序列测试,in 操作的对象必须是可迭代类型(Iterable,我们将讲到迭代器的时候讲),否则会报一个TypeError的错误。例如
TypeError: argument of type 'int' is not iterable
s[i],这样的操作就是索引,在其他语言之中,索引都是从0~len-1的,但在Python之中索引可以是负数。
如果索引是负数,则-1表示最后一个元素,-len则表示第一个元素,其中-0就是0。
同样如果索引不在以上范围,则抛出一个IndexError错误。
n<=0
都会被当作是0,0*s
或s*0
的结果都会是s同种类型的空序列。
注:这里的s*n(当n不等于0的时候),它们只是被多次引用而不是多次拷贝。
>>> s = [[]]
>>> s1 = s*3
>>> s1[0].append(1)
>>> s1
[[1], [1], [1]]
>>> s
[[1]]
i, j, k都可以是负数,索引如果是负数,相当于len(s)+i。其中-0仍然是0。
步长为k的从i到j的切片被定义为x=i+n*k
的项序列,其中0<=n<=(j-1)/k。换句话说,索引为i,i+k,i+2*k,i+3*k
等,当达到j(不包括j)时停止;
注: k不能为零,如果为零,会抛出一个ValueError错误
ValueError: slice step cannot be zero
拼接一个不可变序列总是会产生一个新的对象,这意味着通过重复的序列拼接将会在总序列长度中有一个二次运行时代价。如果要获得线性的运行时成本,你必须使用以下选项中的一种
如果value没有找到,则抛出一个ValueError(如下所示),并不是所有的实现都支持传递额外的i和j参数。这些参数可以有效的搜索序列的子部分,传递额外的参数大致等价于s[i:j].index(x),只是在不复制任何数据的情况下使用返回的索引,而返回的索引是序列的开始,而不是切片中的开始。也就是说返回x在序列[i,j)中首次出现的位置。
ValueError: substring not found
ValueError: 1 is not in list
range(1,10)*10
TypeError: unsupported operand type(s) for *: 'range' and 'int'
range(1,10)+range(1,19)
TypeError: unsupported operand type(s) for +: 'range' and 'range'
在python之中,字符串是由引号(可以是单引号,双引号,三重引号)引起来的字符序列。