首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从不带索引的列表中删除元素

从不带索引的列表中删除元素
EN

Stack Overflow用户
提问于 2012-10-03 05:51:22
回答 4查看 8.4K关注 0票数 4

因此,我以这种方式遍历列表中的项:

代码语言:javascript
复制
for virus in viruses:
    do stuff
    remove virus

如果我有索引,我可以只做del virusi,显然我可以调整代码来做一些像for index in range(0, len(viruses))这样的事情,但是对于我想在for循环中做的其他事情,这会让代码很快变得丑陋。有没有什么我可以根据我正在迭代的病毒的名称来删除的?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-10-03 05:58:48

这样如何:

代码语言:javascript
复制
for virus in viruses[:]:
    # do stuff
    viruses.remove(virus)  # remove "virus" from the original list

viruses[:]会创建我们的viruses列表的副本。需要注意的是,您还可以使用list(oldlist)复制列表(我发现这更具可读性,但两者都可以)。您可以在python here中阅读有关列表的更多信息。

票数 9
EN

Stack Overflow用户

发布于 2012-10-03 05:58:54

要按项的值删除它,只需使用list.remove()

在迭代时从列表中移除元素可能会导致一些意想不到的问题,因此请确保您正在迭代副本:

代码语言:javascript
复制
for virus in viruses[:]:
    # do stuff
    viruses.remove(virus)
票数 4
EN

Stack Overflow用户

发布于 2012-10-03 05:52:44

lists有一个方法remove(),使用它可以按值删除元素,

如果你正在修改一个列表并对它进行迭代,那么你应该使用reversed(),否则迭代会遗漏一些元素:

代码语言:javascript
复制
for virus in reversed(viruses):
    viruses.remove(virus)

一个简单的例子:

代码语言:javascript
复制
In [203]: lis=range(0,10)

In [206]: for x in reversed(lis):
   .....:     if x%2==0:                #remove even numbers
   .....:         lis.remove(x)
   .....:         
   .....:         

In [207]: lis
Out[207]: [1, 3, 5, 7, 9]

或者使用浅层复制:

代码语言:javascript
复制
In [212]: lis=range(10)

In [213]: for x in lis[:]:
    if x%2==0:
        lis.remove(x)
   .....:         
   .....:         

In [216]: lis
Out[216]: [1, 3, 5, 7, 9]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12698915

复制
相关文章

相似问题

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