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

Hob*_*use 1 python

在python中有更快的方法吗?

[f for f in list_1 if not f in list_2]
Run Code Online (Sandbox Code Playgroud)

list_1和list_2都包含大约120,000个字符串.生成新列表大约需要4分钟.

tza*_*man 9

如果你把list_2set,就应该使遏制检查快了很多:

s = set(list_2)
[f for f in list_1 if not f in s]
Run Code Online (Sandbox Code Playgroud)

这是因为x in list是O(n)检查,x in set而是恒定时间.

另一种方法是使用set-difference:

list(set(list_1).difference(set(list_2)))
Run Code Online (Sandbox Code Playgroud)

但是,这可能不会比第一种方式更快 - 而且,它将消除list_1您可能不想要的重复项.