切片插入问题,L [1:1]

时间:2011-01-01 15:20:35

标签: python slice

练习一些python,这是一种非常容易掌握的语言。

我有

>>> L = [1,2,3,4]
>>> L[1:1] = [1,2,3]
>>> L
[1, 1, 2, 3, 2, 3, 4]

所以在第二行实际上L[1:1]是空列表,但是python如何理解从[1,2,3]开始插入1列表。我猜有一些内部对我们来说不透明,显然,我猜L[1:1]会返回对索引1的引用,即使它返回一个空列表...

祝福, 了Umut

3 个答案:

答案 0 :(得分:5)

L[1:1]表示从索引1(第二个元素)开始的列表L的切片,最多但不包括索引1.因此它是一个空列表。在作业的右侧,它只是一个匿名的空列表。但是在左侧,赋值知道切片的位置,并且可以将新列表值拼接到适当的位置。

答案 1 :(得分:3)

切片的行为取决于它是否在表达式的左侧或右侧。当它在左侧时,它不会返回一个列表 - 相反,它表现为一个切片对象,它更了解切片并具有专门覆盖的赋值以作为插入操作。

答案 2 :(得分:1)

官方的Python Tutorial在我看来解释得最好。 Chapter 3.1.2的结尾包含以下图表:

 +---+---+---+---+---+
 | H | e | l | p | A |
 +---+---+---+---+---+
 0   1   2   3   4   5

这说明您可以将索引视为指向BETWEEN元素。因此,在此图示中,如果指定切片[1:1],则实际上是指He之间的空格,但不包括它们。

如果您想覆盖He,则需要指定切片[0:2]