Python包含6種內建序列:列表、元組、字符串、Unicode字符串、buffer對象、xrange對象。
這些序列支持通用的操作:
- 索引
索引是從0開始計數;當索引值為負數時,表示從最后一個元素(從右到左)開始計數。這里列舉幾個例子:
#字符串字面值可以直接使用索引,不需要專門的變量引用
>>> 'Hello World!'[0]
'H'
>>> 'Hello World!'[11]
'!'
#注意越界
>>> 'Hello World!'[12]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range
#表示右邊第一個
>>> 'Hello World!'[-1]
'!'
>>> 'Hello World!'[-11]
'e'
#注意越界
>>> 'Hello World!'[-12]
'H'
>>> 'Hello World!'[-13]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range
- 分片
分片用於截取某個范圍內的元素,通過:來指定起始區間(左閉右開區間,包含左側索引值對應的元素,但不包含右測索引值對應的元素。有幾種典型的使用方法,參考舉例:
#注意不包括右邊索引值對應的元素
>>> num = [1,2,3,4,5,6,7,8,9,10]
>>> num[3]
4
>>> num[6]
7
>>> num[3:6]
[4, 5, 6]
#留意右邊邊界
>>> num[3:9]
[4, 5, 6, 7, 8, 9]
#右邊越界,剛好是10對應的下一個索引值
>>> num[3:10]
[4, 5, 6, 7, 8, 9, 10]
#右邊越界
>>> num[3:11]
[4, 5, 6, 7, 8, 9, 10]
#注意是不包含最后一個元素的
>>> num[-3:-1]
[8, 9]
>>> num[-4:-1]
[7, 8, 9]
>>> num[-10:-1]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
#注意右邊界
>>> num[-10:0]
[]
>>> num[-5:-1]
[6, 7, 8, 9]
#注意右邊界
>>> num[-5:]
[6, 7, 8, 9, 10]
>>> num[-5:1]
[]>>> num[3:1]
[]
>>> num[3:-1]
[4, 5, 6, 7, 8, 9]
#取最右3個元素
>>> num[-3:]
[8, 9, 10]
#取最左3個元素
>>> num[:3]
[1, 2, 3]
#可以加入step length
>>> num[1:10:3]
[2, 5, 8]
>>> num[0:10:3]
[1, 4, 7, 10]
#起始位置默認為最左和最右,但不包括最右的元素
>>> num[::2]
[1, 3, 5, 7, 9]
>>> num[0:9:1]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> num[0:10:1]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
#如果step length為0,會報錯,也就是說步長不可以為0
>>> num[1:5:0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: slice step cannot be zero
#如果步長為負數,表示從右向左提取元素
#注意不包括6對應的元素
num[10:6:-1]
[10, 9, 8]
#倒序輸出
>>> num[10::-1]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
#從最左邊開始
>>> num[:-3:1]
[1, 2, 3, 4, 5, 6, 7]
>>> num[:3:1]
[1, 2, 3]
#從最右邊開始
>>> num[:3:-1]
[10, 9, 8, 7, 6, 5]
要點:分片包括起始索引對應的元素,但不包括終止索引對應的元素。如果索引值為負值,則表示從最右邊元素開始,需避免索引越界。
- '+'運算
表示兩個序列的相連,但是僅允許相同類型的序列才能進行連接操作。舉例:
#列表
>>> [1,2,3] + [3,2,1]
[1, 2, 3, 3, 2, 1]
#字符串
>>> 'Hi' + ',' + 'Baby'
'Hi,Baby'
#元組(tuple)
>>> ('This','is','a') + ('test','case')
('This', 'is', 'a', 'test', 'case')
#如果序列類型不一致,則會報錯
>>> 'Hi' + [1,2]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'list' objects
小結:序列支持‘+’運算,表示兩個相同類型的序列的連接。
- '*'運算
'*'運算表示生成一個元素重復多次的序列,舉例:
>>> 'hi '*5
'hi hi hi hi hi '
>>> "hello" * 3
'hellohellohello'
>>> (1,2,3) * 4
(1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3)
>>> [1,2,3] * 4
[1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]
#支持none
>>> [None]*10
[None, None, None, None, None, None, None, None, None, None]
#支持交換律
>>> 4 * [1,2,3]
[1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]
乘法表示將序列重復N次以生成一個新的序列,可以用None進行初始化一個序列。
