Python學習筆記之序列

weixin_33670713發表於2016-01-31

在Python資料型別中,我們經常會接觸到這樣一種資料型別,它們的成員是有序排列的,並且能夠通過下標偏移量可以訪問它的具體的成員,這種Python型別統稱為序列,序列主要包括字串、列表和元組

序列

序列:一種有序排列的、可以通過下標偏移量進行訪問的資料型別。下標偏移量是從0開始到總元素數-1,這種訪問形式和我們C語言中的陣列的訪問形式相同。

序列型別操作符

序列型別操作符主要分為成員關係操作符(in 、not in)、連線操作符(+)、重複操作符(*)、切片操作符([]、[:]、[::])

成員關係操作符(in、not in)

成員關係操作符主要是用來判斷一個元素是否屬於一個序列的。in/not in操作符的返回值一般來講是一個布林值False/True。滿足成員關係就返回True,否則返回False。

物件 [not] in 序列

seq = "Hello" # 字串
'H' in seq  True

number = (1,2,3,4,5) # 元組
2 not in number  False 

連線操作符(+)

通過這個操作符,我們可以簡單地把兩個相同型別的序列連線成一個新的序列。

sequeue = sequeue1 + sequeue2

注意:這種操作雖然簡單,但是比較佔用記憶體,儘量少使用。

sequeue1 = "Hello"
sequeue2 = " Word!"
sequeue = sequeue1 + sequeue2
print sequeue

重複操作符(*)

如果我們需要一個序列的多份拷貝時,這種操作符比較有用。

sequeue * copy_num

# 使用它來做分割線
sequeue = _
sequeue = sequeue * 6
print sequeue 

操作符([]、[:]、[::])

序列型別就是包含一些順序排列的物件的一個結構。我們可以使用[]加下標偏移量來訪問一個元素或者[start_index:end_index]訪問連續的幾個元素或使用[start_index:end_index:num]來間隔num個元素訪問序列。

操作符[]

使用這種操作符只能訪問一個元素。

sequeue[index]

注意:index是想要訪問元素的下標偏移量,偏移量既可以為正,也可以為負。它們的區別在於正索引以序列的開始為起點,負索引是以序列的結束為起點。在使用過程儘量避免訪問一個越界的索引,它會引發異常。

names = ['Dava','Joe','Faye','Ammy','Frakle','Talor']
print names[0] 

print names[6] # 這是一個越界的索引
Traceback (most recent call last):
   File "<pyshell#1>", line 1, in <module>
     print names[6]
IndexError: list index out of range

切片操作符[:]

當我們需要同時獲取多個元素時,操作符[]就有點力不從心了,雖然它可以實現,但是程式碼太醜陋了,所以我們就得尋找新的操作符[:]來解決問題。

sequeue[start_index:end_index]

names = ['Dava','Joe','Faye','Ammy','Frakle','Talor']
print names[2:4]
# result
['Faye','Ammy']

如果我們沒有提供任何的起始索引和結束索引,它就會訪問整個序列。

names = ['Dava','Joe','Faye','Ammy','Frakle','Talor']
# 這種方法和names[0:6]是一樣的結果
print names[:]  
# result
['Dava', 'Joe', 'Faye', 'Ammy', 'Frakle', 'Talor']

如果我們只是提過起始索引或者結束索引,如果我們只提供起始索引,它會返回從起始索引到index-1的所有元素,如果我們只提供結束索引,它會返回從索引為0到結束索引的元素。

names = ['Dava','Joe','Faye','Ammy','Frakle','Talor']
# 我們只給了起始索引
print names[2:]
# result
['Faye', 'Ammy', 'Frakle', 'Talor']
# 我們只給了結束索引
print names[:3]
# result
['Dava', 'Joe', 'Faye']

切片操作符[::]

操作符[::]比操作符[:]多出來的第三個索引值是用做步長引數的,它和range()裡面的步長引數功能相似。

[start_index:end_index:num]

names = ['Dava','Joe','Faye','Ammy','Frakle','Talor']
# 隔一個取一個
print names[2:6:2] 
# result
['Faye', 'Frakle']

注意:在序列的操作過程中,我們的列印結果是不包括結束索引所對應的那個元素的。切片索引的語法要比單一元素索引靈活得多,開始和結束索引值可以超過字串的長度。

相關文章