Python的:如何返回布尔值的列表,看看在另一个列表中的一个列表的元素(Python: How t

2019-08-07 13:58发布

我有两个列表:

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)

Answer 1:

使用列表理解:

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]


Answer 2:

另一种方式来写它(但速度较慢,由于拉姆达使用):

>>> 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]


Answer 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]


文章来源: Python: How to return list of booleans to see if elements of one list in another list