Python访问列表值

示例

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__在类中重写为我们的对象提供切片功能,这可能会很有用。