我有两个列表:
A = [1,2,3,4,5,6,7,8]
B = [2,3,4]
并希望得到长的布尔列表(A),其中每个索引处的元素指示在同一索引处的元素是否在列表B.返回值将在任何地方:
[False, True, True, True, False, False, False, False]
这将是很容易写一个函数,而是想知道是否有在Python做的范式方式。
在R,对方将是
which(A %in% b)
我有两个列表:
A = [1,2,3,4,5,6,7,8]
B = [2,3,4]
并希望得到长的布尔列表(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)
中列出。
In [167]: b=set(B)
In [168]: [x in b for x in A]
Out[168]: [False, True, True, True, False, False, False, False]
另一种方式来写它(但速度较慢,由于拉姆达使用):
>>> A = [1,2,3,4,5,6,7,8]
>>> B = [2,3,4]
>>> S = set(B)
>>> map(lambda x: x in S, A)
[False, True, True, True, False, False, False, False]
In [1]: A = [1,2,3,4,5,6,7,8]
In [2]: B = [2,3,4]
In [3]: map(B.__contains__, A)
Out[3]: [False, True, True, True, False, False, False, False]