I have two lists:
A = [1,2,3,4,5,6,7,8]
B = [2,3,4]
and want to get a boolean list of length(A) where the element at each index indicates whether the element at the same index in A is in anywhere in the list B. The return value would be:
[False, True, True, True, False, False, False, False]
It would be easy to write a function, but want to know if there is a paradigmatic way of doing it in Python.
In R, the counterpart would be
which(A %in% b)
use a list comprehension:
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]
If B
is huge then better convert it to a set
first. As, membership test for sets is O(1)
compared to O(n)
in lists.
In [167]: b=set(B)
In [168]: [x in b for x in A]
Out[168]: [False, True, True, True, False, False, False, False]
Another way to write it (but slower due to lambda usage):
>>> 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]