在Python中最快速去除列表重复项的方法
我有两个非常大的列表,遍历一次至少需要一秒钟,而我需要遍历200,000次。有没有什么快速的方法可以把这两个列表中的重复项去掉,合并成一个列表呢?
4 个回答
8
正如丹尼尔所说,一个集合不能包含重复的条目,所以我们需要把列表合并在一起:
list1 + list2
然后把新的列表转换成一个集合:
set(list1 + list2)
最后再把它转换回列表:
list(set(list1 + list2))
12
我建议你可以这样做:
def combine_lists(list1, list2):
s = set(list1)
s.update(list2)
return list(s)
这样可以避免把前两个东西拼接成一个超级长的列表的问题。
根据你对输出结果的需求,如果不需要再转换回列表,那就没必要去做这一步。如果顺序很重要,你可能需要用一些装饰/排序/去装饰的技巧来处理这个。
26
这是我能想到的最快的方法:
import itertools
output_list = list(set(itertools.chain(first_list, second_list)))
稍微更新一下:正如jcd提到的,根据你的应用场景,你可能不需要把结果再转换回列表。因为集合(set)本身是可以被遍历的,你可以直接使用它:
output_set = set(itertools.chain(first_list, second_list))
for item in output_set:
# do something
不过要注意,使用set()
的任何解决方案可能会改变你列表中元素的顺序,所以不能保证元素会保持在某个特定的顺序。话虽如此,由于你是在合并两个列表,实际上很难找到一个好的理由来要求它们有特定的顺序,所以这可能不是你需要担心的事情。