Python:如何返回布尔列表以查看另一个列表中是否有一个列表的元素

tyl*_*ole 1 python list matching

我有两个清单:

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

并且想获得一个长度为(A)的布尔列表,其中每个索引处的元素指示A中相同索引处的元素是否在列表B中的任何位置.返回值将是:

[False, True, True, True, False, False, False, False] 
Run Code Online (Sandbox Code Playgroud)

编写一个函数会很容易,但是想知道在Python中是否有一种典型的方法.

在R中,对应物将是

which(A %in% b)
Run Code Online (Sandbox Code Playgroud)

Ash*_*ary 5

使用列表理解:

In [164]: A = [1,2,3,4,5,6,7,8]

In [165]: B = [2,3,4]

In [166]: [x in B for x in A]
Out[166]: [False, True, True, True, False, False, False, False]
Run Code Online (Sandbox Code Playgroud)

如果B是巨大的,那么最好将其转换为set第一个.因为,集合的成员资格测试O(1)O(n)列表进行比较.

In [167]: b=set(B)

In [168]: [x in b for x in A]
Out[168]: [False, True, True, True, False, False, False, False]
Run Code Online (Sandbox Code Playgroud)