Python: How to return list of booleans to see if elements of one list in another list

这一生的挚爱 提交于 2019-12-20 05:43:08

问题


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)

回答1:


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]



回答2:


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]



回答3:


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]


来源:https://stackoverflow.com/questions/14430454/python-how-to-return-list-of-booleans-to-see-if-elements-of-one-list-in-another

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!