首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用负索引调整大小的列表片分配

使用负索引调整大小的列表片分配
EN

Stack Overflow用户
提问于 2020-06-26 13:19:27
回答 4查看 170关注 0票数 5

如果我这么做:

代码语言:javascript
复制
p=list(range(10))
p[2:6:1]=['a','b']

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

现在,我知道了

代码语言:javascript
复制
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

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-06-26 13:29:21

这是扩展片的预期行为。正如您已经发现的,它要求将相同数量的元素分配给片。这里是文档,它提到了这个问题。

更明显的是,为什么要将p[1:5:2]切片。这不是一个很好的连续块,您可以很容易地调整大小。

p[2:6:1]之所以工作,是因为它本质上是一个规则的切片(即p[2:6] )。

票数 5
EN

Stack Overflow用户

发布于 2020-06-26 13:27:58

我不知道python列表切片的确切内部工作原理,但这可能与p[-2:-6:-1]在列表中反向工作而不是转发有关。

如果您需要快速修复,请使用:p[-6:-2:1] = ['a', 'b']

这样,你将再次从“左到右”工作。

票数 2
EN

Stack Overflow用户

发布于 2020-06-26 13:36:24

根据文档,可以使用常规片(第一个)的赋值来更改序列的长度,而扩展片则不是那么灵活。

当将分配给扩展片时,语句右侧的列表必须包含与它要替换的片相同数量的项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62595629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档