list1 = [1, 2, 3, 4]
element = list1[1:][1]
print(element)
为什么打印3?
如何评估?它是否首先采用来自索引1的list1元素,然后采用该索引的1索引?
答案 0 :(得分:4)
Python's grammar指定了对其进行评估的方式,因为它可以构造程序的语法树。
在技术细节上不做过多介绍,这种索引是 left递归。这意味着:
foo[bar][qux]
的缩写:
(foo[bar])[qux]
因此,这些索引是从左到右评估的。
其评估方式如下:
list1 = [1, 2, 3, 4]
temp = list1[1:] # create a sublist starting from the second item (index is 1)
element = temp[1] # obtain the second item of temp (index is 1)
(当然,实际上没有创建temp
变量,但是列表本身是存储在内存中的真实的 object ,因此也可能会更改状态等)。
因此,我们首先从第二个项目开始切片,得到列表[2, 3, 4]
,然后获得该列表中 的 second 个项目,因此3
。