我有两个清单,l1
和l2
.我需要的物品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)
没有迭代我可以这样做吗?
没有迭代就不能这样做.即使你调用单个方法,内部也会迭代.
您的方法适用于小型列表,但您可以使用此方法代替更大的列表:
s2 = set(l2)
result = [i for i in l1 if not i in s2 ]
Run Code Online (Sandbox Code Playgroud)
这将很快并且还将保留l1中元素的原始顺序.
简短的回答,是的list(set(l1) - set(l2))
,虽然这不会保持秩序.
答案很长,不,因为内部CPU总是会迭代.但如果你使用set()
的是迭代将进行高度优化,并会快那么你的列表解析(更不用说检查会员value in list
是多快带套然后列出).