我希望我不会在这里重复:-)
我想知道过滤python列表最有效的方法是什么.我手头的任务是找出没有出现在其他列表中的列表元素.
我的拳头列表是一个对象列表(没有不必要的细节):
Class A:
def __init__(self,item1, item2):
self.item1 = item1
self.item2 = item2
Run Code Online (Sandbox Code Playgroud)
后来,在我的剧本我解析一个输入文本文件和填充list1真实数据(包括item1和item2字段都是字符串)
还有第二个列表,list2只包含一个与之对应的字符串列表item1.我感兴趣的是,在list1哪里的元素item1不在list2.
(list1包含大约3000个元素,list2更大 - 大约60000个元素.)
我的拳头尝试非常明显:
notMatched = list(itertools.ifilter(lambda x: x.item1 not in list2), list1))
Run Code Online (Sandbox Code Playgroud)
现在,它按预期工作,给我我想要的东西,但我仍然想知道它是否是我能带来的最佳解决方案.任何想法的人?
谢谢
做list2一套.这将改善查找的性能not in list2.
你可以逃脱这个:
set2 = set(list2)
not_matched = [a for a in list1 if not a.item1 in set2]
Run Code Online (Sandbox Code Playgroud)