我有两个清单:
A = [1,2,3,4,5,6,7,8] B = [2,3,4]
并想要获取一个长度为(A)的布尔列表,其中每个索引处的元素指示A中相同索引处的元素是否在列表B中的任何位置。返回值为:
[False, True, True, True, False, False, False, False]
编写一个函数很容易,但是想知道在Python中是否有一种范式来实现它。
在R中,对应项为
which(A %in% b)
使用列表理解:
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]
如果B巨大,那么最好将其转换为set第一个。如此,将集合的成员资格测试O(1) 与O(n)列表中的进行比较。
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]