我希望我不会在这里重复: - )
我想知道过滤python列表最有效的方法是什么。 我手头的任务是找出没有出现在其他列表中的列表元素。
我的拳头列表是一个对象列表(没有不必要的细节):
Class A:
def __init__(self,item1, item2):
self.item1 = item1
self.item2 = item2
稍后,在我的脚本中,我正在解析输入文本文件并使用实际数据填充list1
(item1
和item2
字段都是字符串)
还有第二个列表,list2
只包含与item1
相对应的字符串列表。我感兴趣的是list1
中item1
不在list2
中的元素。
(list1
包含大约3000个元素,list2
更大 - 大约60000个元素。)
notMatched = list(itertools.ifilter(lambda x: x.item1 not in list2), list1))
现在,它按预期工作,给我我想要的东西,但我仍然想知道它是否是我能带来的最佳解决方案。 任何人都不知道吗?
由于
答案 0 :(得分:5)
让list2
成套。这将提高查找not in list2
的性能。
你可能可以逃脱这个:
set2 = set(list2)
not_matched = [a for a in list1 if not a.item1 in set2]