簡體   English   中英

Python:如何在三個列表中查找常用值

[英]Python: how to find common values in three lists

我嘗試找到三個不同列表的常用值列表:

a = [1,2,3,4]
b = [2,3,4,5]
c = [3,4,5,6]

當然我自然會嘗試使用and運算符,但是這樣我只得到表達式中最后一個list的值:

>> a and b and c
out: [3,4,5,6]

有沒有找到常用值列表的簡短方法:

[3,4]

BR

使用集:

>>> a = [1, 2, 3, 4]
>>> b = [2, 3, 4, 5]
>>> c = [3, 4, 5, 6]
>>> set(a) & set(b) & set(c)
{3, 4}

或者喬恩建議:

>>> set(a).intersection(b, c)
{3, 4}

使用集合的好處是您不需要重復迭代原始列表。 每個列表迭代一次以創建集合,然后集合相交。

用簡單的方式來解決這個使用的過濾列表理解為Geotob確實會遍歷表bc的每個元素a ,所以對於較長的名單,這將是少了很多有效的。

out = [x for x in a if x in b and x in c]

是一個快速而簡單的解決方案。 這構建了一個清單out與項目a ,如果這些條目是在bc

對於較大的列表,您需要查看@poke提供的答案

對於仍然在這個問題上磕磕絆絆的人來說,numpy可以使用:

np.intersect1d(array1, array2)

這適用於列表以及numpy數組。 它可以在functools.reduce的幫助下擴展到更多的數組,或者它可以簡單地重復幾個數組。

from functools import reduce
reduce(np.intersect1d, (array1, array2, array3))

要么

new_array = np.intersect1d(array1, array2)
np.intersect1d(new_array, array3)

暫無
暫無

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

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