如何检查列表A中的元素是否不存在于Python的列表B中?

Rob*_*ley 6 python list

如果我单独使用一个元素,这很容易:

>>> 3 not in [2, 3, 4]
False
>>> 3 not in [4, 5, 6]
True

但是如果我有两个列表并且必须检查列表A中的元素是否出现在列表中B呢?

A=[1,2,3,4]
B=[4,5,6,7]
Run Code Online (Sandbox Code Playgroud)

我如何得到一个结果,显示我说1,2,3不在名单B

beh*_*uri 6

如果列表中的项目是可散列的

>>> set(A) - set(B)
{1, 2, 3}
Run Code Online (Sandbox Code Playgroud)

否则,您可以使用filter功能:

>>> list(filter(lambda a: a not in B, A))
[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如果Bsorted,您可以通过使用bisect.bisect_left对数搜索来获得更好的性能:

>>> def pred(a):  # if B is already *sorted*
...     from bisect import bisect_left
...     i = bisect_left(B, a)
...     return i == len(B) or B[i] != a
... 
>>> list(filter(pred, A))
[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)


Joe*_*oka 6

您还可以使用列表理解:

C=[i for i in A if i not in B]
Run Code Online (Sandbox Code Playgroud)

输出:

[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)


zxz*_*zak 3

使用列表理解:

真实的回答

any([True for x in [1, 2, 3, 4] if x in [4, 5, 6, 7]])
Run Code Online (Sandbox Code Playgroud)

第二个列表中不存在的元素列表

[x for x in [1, 2, 3, 4] if x not in [4, 5, 6, 7]]
Run Code Online (Sandbox Code Playgroud)