从Python中的两个列表中获得差异

Pol*_*Pol 6 python

我有两个清单,l1l2.我需要的物品l1不在其中l2.

l1 = [2, 3, 4, 5]
l2 = [0, 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

我只想得到[4,5] - 只有l1中的新值.

[i for i in l1 if not i in l2 ]
Run Code Online (Sandbox Code Playgroud)

没有迭代我可以这样做吗?

Mar*_*ers 7

没有迭代就不能这样做.即使你调用单个方法,内部也会迭代.

您的方法适用于小型列表,但您可以使用此方法代替更大的列表:

s2 = set(l2)
result = [i for i in l1 if not i in s2 ]
Run Code Online (Sandbox Code Playgroud)

这将很快并且还将保留l1中元素的原始顺序.


orl*_*rlp 7

简短的回答,是的list(set(l1) - set(l2)),虽然这不会保持秩序.

答案很长,不,因为内部CPU总是会迭代.但如果你使用set()的是迭代将进行高度优化,并会快那么你的列表解析(更不用说检查会员value in list快带套然后列出).