[Python筆記]序列(一)索引、分片


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進行初始化一個序列。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM