繁体   English   中英

在Python中,更有效的方法是返回不在第二个列表中的列表元素?

[英]What is a more efficient way in Python to return list elements which are not in a second list?

有没有更快的方法在python中做到这一点?

[f for f in list_1 if not f in list_2]

list_1和list_2都包含大约120.000个字符串。 生成新列表大约需要4分钟。

如果将list_2放入set ,它将使遏制性检查更快:

s = set(list_2)
[f for f in list_1 if not f in s]

这是因为x in list中的x in list是O(n)校验,而x in set是固定时间。

另一种方法是使用集合差异:

list(set(list_1).difference(set(list_2)))

但是,这可能不会比第一种方法快-而且,它将消除list_1中您可能不需要的重复项。

根据您要对新列表执行的操作,如果您使用itertools.ifilter()进行某种惰性评估就足够了(这样您就无需花费时间来事先构建新列表,但是您应该转换list_2到任何情况下的set ,因此查找为O(1) ):

import itertools:
set_2 = set(list_2)

for f in itertools.ifilter(lambda x: x not in set_2, list_1):
    # do something with f

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM