从列表中删除相等元素

1 投票
3 回答
789 浏览
提问于 2025-04-16 13:21

我能不能检查一下一个列表里有没有两个或更多相同的元素,然后把它们删除,即使我不知道具体要找哪些元素?

或者在比较两个列表的时候,比如说A和B,看看A里有哪些元素在B里不存在,这在集合理论里是怎么做的。

3 个回答

0

其实有一个叫做 set 的内置类型,它可以让你做一些操作,比如 intersection()(交集)和 union()(并集)。不过,如果你只是想处理一个简单的列表,并想得到其中的唯一值,一个快速又简单的方法就是把这些值放进一个字典里,最后再取出字典的键。

>>> L = [1, 2, 2, 3, 3, 3, 4, 5, 6, 6]
>>> d = {}
>>> for num in L:
    d[num] = None


>>> d.keys()
[1, 2, 3, 4, 5, 6]

如果你对保持顺序感兴趣的话,还有一篇有趣的博客文章探讨了几种“去重”列表的方法,包括保持顺序和不保持顺序的方式,可以在这里查看

1

关于你问题中的 Or check ... 部分:

In []: A, B= {1, 2, 3, 4}, {2, 4, 6, 8}
In []: A- B
Out[]: set([1, 3])

更新 关于所用语法的有效性:

In []: A, B= {1, 2, 3, 4}, {2, 4, 6, 8} # seems to be valid for 2.7 and above
# In []: A, B= set([1, 2, 3, 4]), set([2, 4, 6, 8]) # for 2.4 and above
In []: A- B # apparently since 2.4
Out[]: set([1, 3])
2

如果你不在乎这些项目的顺序,那就直接用Python的set数据类型,别用列表了:

s = set([1, 2, 3, 3])
t = set([2, 4, 6])
print s
print t
print s - t

打印结果是

set([1, 2, 3])
set([2, 4, 6])
set([1, 3])

撰写回答