簡體   English   中英

如何返回布爾值列表以查看一個列表的元素是否在另一個列表中

[英]How to return list of booleans to see if elements of one list in another list

我有兩個清單:

A = [1,2,3,4,5,6,7,8]
B = [2,3,4]

並且想要得到一個 length(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(n)相比,集合的成員資格測試是O(1)

In [167]: b=set(B)

In [168]: [x in b for x in A]
Out[168]: [False, True, True, True, False, False, False, False]

另一種編寫它的方法(但由於 lambda 的使用而變慢):

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM