在列表Python中删除重复项的最快方法

时间:2009-11-04 17:17:36

标签: python list sorting

我有两个非常大的列表并且循环通过它至少需要一秒钟,我需要做200,000次。删除两个列表中重复项的最快方法是什么?

4 个答案:

答案 0 :(得分:20)

这是我能想到的最快的方式:

import itertools
output_list = list(set(itertools.chain(first_list, second_list)))

轻微更新:由于jcd指出,根据您的应用程序,您可能不需要将结果转换回列表。由于集合本身是可迭代的,因此您可以直接使用它:

output_set = set(itertools.chain(first_list, second_list))
for item in output_set:
    # do something

请注意,任何涉及使用set()的解决方案都可能会重新排序列表中的元素,因此无法保证元素将按任何特定顺序排列。也就是说,既然你要把两个列表组合在一起,那么你很难想出为什么你需要对它们进行特定的排序,所以这可能不是你需要担心的事情。

答案 1 :(得分:11)

我建议这样的事情:

def combine_lists(list1, list2):
    s = set(list1)
    s.update(list2)
    return list(s)

这消除了创建前两个串联的怪物列表的问题。

根据您对输出所做的操作,不要费心转换回列​​表。如果订购很重要,你可能需要某种装饰/排序/不合理的恶作剧。

答案 2 :(得分:7)

正如丹尼尔所说,一个集合不能包含重复的条目 - 所以连接列表:

list1 + list2

然后将新列表转换为集合:

set(list1 + list2)

然后回到列表:

list(set(list1 + list2))

答案 3 :(得分:3)

result = list(set(list1).union(set(list2)))

我就是这样做的。不过,我对表现并不是很确定,但它确实比手工操作更好。