从列表中删除相等元素
我能不能检查一下一个列表里有没有两个或更多相同的元素,然后把它们删除,即使我不知道具体要找哪些元素?
或者在比较两个列表的时候,比如说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])