Python列表是零索引的,并且在其他语言中的作用类似于数组。
lst = [1, 2, 3, 4] lst[0] # 1 lst[1] # 2
尝试访问列表范围之外的索引将引发IndexError。
lst[4] # IndexError:列表索引超出范围
负索引被解释为从列表的末尾开始计数。
lst[-1] # 4 lst[-2] # 3 lst[-5] # IndexError:列表索引超出范围
这在功能上等同于
lst[len(lst)-1] # 4
列表允许将切片符号用作lst[start:end:step]。切片符号的输出是一个新列表,其中包含从索引start到的元素end-1。如果省略选项,则start默认为列表开头,列表end结尾和step1:
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] # []由于起始索引大于lst的长度,因此返回空列表 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,并且被反转。
高级切片
对列表进行切片时__getitem__(),将使用对象调用list对象的方法slice。Python具有内置的slice方法来生成slice对象。我们可以使用它来存储切片并稍后像这样重用它,
data = 'chandan purohit 22 2000' #假设数据字段的长度固定 name_slice = slice(0,19) age_slice = slice(19,21) salary_slice = slice(22,None) #现在我们可以有更多可读的切片 print(data[name_slice]) #尚丹·珀罗希特 print(data[age_slice]) #'22' print(data[salary_slice]) #'2000'
通过__getitem__在类中重写为我们的对象提供切片功能,这可能会很有用。