Python:过滤列表的最有效方法

时间:2012-06-14 07:28:39

标签: python filter

我希望我不会在这里重复: - )

我想知道过滤python列表最有效的方法是什么。 我手头的任务是找出没有出现在其他列表中的列表元素。

我的拳头列表是一个对象列表(没有不必要的细节):

Class A:
    def __init__(self,item1, item2):
        self.item1 = item1
        self.item2 = item2

稍后,在我的脚本中,我正在解析输入文本文件并使用实际数据填充list1item1item2字段都是字符串)

还有第二个列表,list2只包含与item1相对应的字符串列表。我感兴趣的是list1item1不在list2中的元素。
 list1包含大约3000个元素,list2更大 - 大约60000个元素。)

我的拳头尝试非常明显:

notMatched = list(itertools.ifilter(lambda x: x.item1 not in list2), list1))

现在,它按预期工作,给我我想要的东西,但我仍然想知道它是否是我能带来的最佳解决方案。 任何人都不知道吗?

由于

1 个答案:

答案 0 :(得分:5)

list2成套。这将提高查找not in list2的性能。

你可能可以逃脱这个:

set2 = set(list2)
not_matched = [a for a in list1 if not a.item1 in set2]