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

3 投票
3 回答
1250 浏览
提问于 2025-04-16 09:16

我在练习一些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],实际上你是在指空隙,也就是He之间的地方,而不是包括这两个字母。

如果你想要覆盖He,你应该指定切片[0:2]

3

切片的行为会根据它在表达式的左右两边而有所不同。当切片在左边时,它不会返回一个列表,而是表现得像一个切片对象。这个切片对象对切片有更多的了解,并且它的赋值方式被特别修改过,可以用来插入元素。

5

L[1:1] 这个表示法是指从列表 L 中提取一部分,开始于索引1(也就是第二个元素),但不包括索引1本身。所以这个结果是一个空列表。在赋值的右边,它只是一个没有名字的空列表。但是在赋值的左边,赋值操作知道从哪里提取的这部分内容,可以把新的列表值放到正确的位置上。

撰写回答