訪問列表值

Python 列表是零索引的,並且像其他語言中的陣列一樣。

lst = [1, 2, 3, 4]
lst[0]  # 1
lst[1]  # 2

嘗試訪問列表邊界之外的索引將引發一個 IndexError

lst[4]  # IndexError: list index out of range

負指數被解釋為從列表末尾開始計算。

lst[-1]  # 4
lst[-2]  # 3
lst[-5]  # IndexError: list index out of range

這在功能上等同於

lst[len(lst)-1]  # 4

列表允許使用切片表示法作為 lst[start:end:step]。切片表示法的輸出是包含從索引 startend-1 的元素的新列表。如果省略選項,start 預設為列表的開頭,end 預設為列表的末尾,step 預設為 1:

lst[1:]      # [2, 3, 4]
lst[:3]      # [1, 2, 3]
lst[::2]     # [1, 3]
lst[::-1]    # [4, 3, 2, 1] 
lst[-1:0:-1] # [4, 3, 2]
lst[5:8]     # [] since starting index is greater than length of lst, returns empty list
lst[1:10]    # [2, 3, 4] same as omitting ending index

考慮到這一點,你可以通過呼叫列印列表的反轉版本

lst[::-1]    # [4, 3, 2, 1]

使用負數的步長時,起始索引必須大於結束索引,否則結果將是空列表。

lst[3:1:-1] # [4, 3]

使用負步驟索引等效於以下程式碼:

reversed(lst)[0:2] # 0 = 1 -1
                   # 2 = 3 -1

使用的指數比負指數中使用的指數少 1 並且相反。

高階切片

切片列表時,使用 slice 物件呼叫列表物件的 __getitem__() 方法。Python 有一個內建切片方法來生成切片物件。我們可以使用它來儲存切片並在以後重複使用它,

data = 'chandan purohit    22 2000'  #assuming data fields of fixed length 
name_slice = slice(0,19)
age_slice = slice(19,21)
salary_slice = slice(22,None)

#now we can have more readable slices
print(data[name_slice]) #chandan purohit     
print(data[age_slice]) #'22'
print(data[salary_slice]) #'2000'

通過在我們的類中重寫 __getitem__,可以為我們的物件提供切片功能,這非常有用。