如果我这么做:
p=list(range(10))
p[2:6:1]=['a','b']我得到了p=[0, 1, 'a', 'b', 6, 7, 8, 9],这意味着Python正用新的列表['a','b']替换索引为2-5的元素。
现在,我知道了
p=list(range(10))
p[-2:-6:-1]=['a','b']Python说ValueError: attempt to assign sequence of size 2 to extended slice of size 4
为什么在第一种情况下调整列表的大小而不是第二种情况?
发布于 2020-06-26 13:29:21
这是扩展片的预期行为。正如您已经发现的,它要求将相同数量的元素分配给片。这里是文档,它提到了这个问题。
更明显的是,为什么要将p[1:5:2]切片。这不是一个很好的连续块,您可以很容易地调整大小。
p[2:6:1]之所以工作,是因为它本质上是一个规则的切片(即p[2:6] )。
发布于 2020-06-26 13:27:58
我不知道python列表切片的确切内部工作原理,但这可能与p[-2:-6:-1]在列表中反向工作而不是转发有关。
如果您需要快速修复,请使用:p[-6:-2:1] = ['a', 'b']
这样,你将再次从“左到右”工作。
发布于 2020-06-26 13:36:24
根据文档,可以使用常规片(第一个)的赋值来更改序列的长度,而扩展片则不是那么灵活。
当将分配给扩展片时,语句右侧的列表必须包含与它要替换的片相同数量的项。
https://stackoverflow.com/questions/62595629
复制相似问题