3

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

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

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

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

稍后,在我的脚本中,我正在解析一个输入文本文件并list1用真实数据填充一个(item1item2字段都是字符串)

还有第二个列表,list2仅包含对应于item1. 我感兴趣的是list1whereitem1中没有的元素list2
list1包含大约 3000 个元素,list2更大 - 大约 60000 个元素。)

我的第一次尝试很明显:

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

现在,它按预期工作,给了我想要的东西,但我仍然想知道这是否是我能想到的最好的解决方案。有人知道吗?

谢谢

4

1 回答 1

5

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

你可能可以摆脱这个:

set2 = set(list2)
not_matched = [a for a in list1 if not a.item1 in set2]
于 2012-06-14T07:31:05.213 回答