[英]How to compare each element of two lists in python
我正在尋找一個類似於R中%in%的Python運算符。它將一個列表中的所有元素與另一個列表中的所有元素進行比較,並返回一個布爾數組。 它將執行以下操作:
a=['word1','word2','word3','word4']
b=['word2','word4']
a *%in%* b
>>False True False True
我找到的最接近的東西是pd.str.contains,但沒有向量化,即它只查找一個元素。 希望有人知道。
清單理解:
[item in b for item in a]
這將以類似於以下代碼的方式創建一個新列表:
newList = []
for item in a:
newList.append(item in b)
其中, item in b
的計算結果為True
,如果item
中存在b
,否則會評估為False
。
如評論中所述(感謝Paul Rooney !),如果將b
設為集合,則可以提高此速度:
b_set = set(b)
result = [item in b_set for item in a]
這是因為,如果b
是一個集合,則b
的查找操作item in b
將花費一致的時間,而如果b
是一個列表,則必須比較每個單個項,直到找到匹配的項為止。
如果b
小,則速度改進不是很明顯,但是對於包含數百個元素的列表b
,這可能是令人討厭的改進。
因為python並不是主要的數字語言或科學語言,所以它並沒有在Matlab或R中默認提供某些功能。也就是說,numpy / scipy生態系統幾乎提供了所有這些語言所需的功能。 例如,numpy具有in1d
函數:
import numpy
a = ['word1','word2','word3','word4']
b = ['word2','word4']
print(numpy.in1d(a, b))
# [False True False True]
使用列表理解 ,我們可以檢查產品的list
比較,並返回True
如果是別的False
l = [*True if i in b else False for i in a]
print(*l)
False True False True
擴大循環
l = []
for i in a:
if i in b:
l.append(True)
else:
l.append(False)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.