切片插入问题,L[1:1]
我在练习一些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
开始插入 [1,2,3]
这个列表的呢?我想这里面有一些我们看不见的内部机制。显然,我猜 L[1:1]
返回的是索引 1
的引用,即使它返回的是一个空列表……
祝好,
Umut
3 个回答
2
我觉得官方的Python教程解释得最清楚。在第3.1.2章的最后,有一个图示:
+---+---+---+---+---+
| H | e | l | p | A |
+---+---+---+---+---+
0 1 2 3 4 5
这个图示说明的是,你可以把索引看作是指向元素之间的空隙。所以在这个例子中,如果你指定一个切片[1:1]
,实际上你是在指空隙,也就是H
和e
之间的地方,而不是包括这两个字母。
如果你想要覆盖H
和e
,你应该指定切片[0:2]
。
3
切片的行为会根据它在表达式的左右两边而有所不同。当切片在左边时,它不会返回一个列表,而是表现得像一个切片对象。这个切片对象对切片有更多的了解,并且它的赋值方式被特别修改过,可以用来插入元素。
5
L[1:1]
这个表示法是指从列表 L
中提取一部分,开始于索引1(也就是第二个元素),但不包括索引1本身。所以这个结果是一个空列表。在赋值的右边,它只是一个没有名字的空列表。但是在赋值的左边,赋值操作知道从哪里提取的这部分内容,可以把新的列表值放到正确的位置上。