首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何删除Python列表中出现的所有特定值?

如何删除Python列表中出现的所有特定值?
EN

Stack Overflow用户
提问于 2013-09-05 06:13:02
回答 3查看 25.1K关注 0票数 5

如何从下面的列表中删除333的两次出现?

代码语言:javascript
复制
>>> a = [-1, 1, 66.25, 333, 333, 1234.5]

我在Python2.7命令行中输入了以下脚本

代码语言:javascript
复制
for num in a:
    if num == 333:
       a.remove(num)

但只有333的第一次出现被删除。

代码语言:javascript
复制
 >>> a
 [-1, 1, 66.25, 333, 1234.5]

如何删除同一元素的所有出现?我希望能够指定要删除所有事件的元素,并按相同的名称获得一个新列表。

EN

回答 3

Stack Overflow用户

发布于 2013-09-05 06:14:41

在这里使用列表理解:

代码语言:javascript
复制
>>> a = [-1, 1, 66.25, 333, 333, 1234.5]
>>> [item for item in a if item != 333]
[-1, 1, 66.25, 1234.5]

您的方法不起作用是因为you're modifying a list while iterating over it

代码语言:javascript
复制
for num in a[:]:  #iterate over a shallow copy
    if num == 333:
       a.remove(num)

若要获取唯一项的列表,请使用一组:

代码语言:javascript
复制
>>> seen = set()
>>> a = [-1, 1, 66.25, 333, 333, 1234.5]
>>> [item for item in a if item not in seen and not seen.add(item)]
[-1, 1, 66.25, 333, 1234.5]

如果秩序不重要:

代码语言:javascript
复制
>>> a = [-1, 1, 66.25, 333, 333, 1234.5]
>>> list(set(a))
[66.25, 1, 333, -1, 1234.5]
票数 7
EN

Stack Overflow用户

发布于 2013-09-05 06:26:27

我觉得你想要的是这样的

代码语言:javascript
复制
a = [-1, 1, 66.25, 333, 333, 1234.5]
a = [el for el, count in collections.Counter(a).items() if count == 1]

这将从任何值的列表中删除元素,条件是它们不止一次出现。

票数 5
EN

Stack Overflow用户

发布于 2013-09-05 06:58:48

在下面的代码中,从5,3,4,7,8,4列表中删除了4编号

代码语言:javascript
复制
>>> def pp(x):
...     if x==4:
...             return False
...     else:
...             return True
... 
>>> filter(pp, [5,3,4,7,8,4])

输出

代码语言:javascript
复制
[5, 3, 7, 8]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18628973

复制
相关文章

相似问题

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