使用负索引调整大小列出切片分配

Nac*_*ket 5 python list variable-assignment slice

如果我这样做:

p=list(range(10))
p[2:6:1]=['a','b']
Run Code Online (Sandbox Code Playgroud)

我明白p=[0, 1, 'a', 'b', 6, 7, 8, 9]这意味着 Python 正在用新列表替换索引为 2-5 的元素['a','b']

现在什么时候,我做

p=list(range(10))
p[-2:-6:-1]=['a','b']
Run Code Online (Sandbox Code Playgroud)

Python 说 ValueError: attempt to assign sequence of size 2 to extended slice of size 4

为什么它在第一种情况下调整列表的大小而不是第二种情况?

bus*_*ear 5

这是扩展切片的预期行为。正如您所发现的,它需要将相同数量的元素分配给切片。这是涉及该问题的文档

更明显的是为什么如果你把p[1:5:2]. 它不是一个很好的连续块,您可以轻松调整其大小。

p[2:6:1]之所以有效,是因为它本质上是一个常规切片,即p[2:6].