![](/img/trans.png)
[英]More Efficient Way to find the Second Largest Item in a List in 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.