访问列表值
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]
。切片表示法的输出是包含从索引 start
到 end-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__
,可以为我们的对象提供切片功能,这非常有用。