首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Python中使用枚举遍历列表时,是否应该创建副本

在Python中使用枚举遍历列表时,是否应该创建副本
EN

Stack Overflow用户
提问于 2018-07-31 03:45:55
回答 1查看 1.6K关注 0票数 1

在回答this question时,我遇到了一些在Python语言中我从未想过的事情(由用户指出)。

基本上,我已经知道(这里有一个关于它的有趣的thread ),为了避免奇怪的行为,在Python语言中,为了避免奇怪的行为,我在迭代时必须制作一个副本。

现在,我的问题是,使用enumerate能解决这个问题吗?

代码语言:javascript
复制
test_list = [1,2,3,4]
for index,item in enumerate(test_list):
    if item == 1:
        test_list.pop(index)

这段代码是否被认为是安全的,或者我应该使用,

代码语言:javascript
复制
for index,item in enumerate(test_list[:]):
EN

回答 1

Stack Overflow用户

发布于 2018-07-31 04:12:08

由于是我的comment导致了这一点,我将添加我的后续内容:

enumerate可以看作是一个生成器,所以它将只接受一个序列(实际上是任何序列或迭代器),并只“生成”递增的索引,以从传递的序列中的每一项中产生(所以它不会仅仅使用"enumerate object"来复制或改变列表)。

对于该问题中的代码,您从未更改过要迭代的列表的长度,并且一旦运行if语句,元素的值就无关紧要了。所以这个副本是不需要的,当一个元素被删除时需要它,因为迭代器索引是与列表共享的,并且没有考虑到被删除的元素。

The Python Ninja有一个很好的例子,告诉你什么时候应该使用拷贝(或者移动到列表理解)

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

https://stackoverflow.com/questions/51601249

复制
相关文章

相似问题

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