簡體   English   中英

在列表列表中查找具有來自另一個列表的最多實例的列表

[英]Find lists in list of lists with the most instances from another list

我有一個清單:

a = [10,9,1,2,3,4] 

和列表列表:

b = [[1,2,3],[6,9,10],[4,5,7,8]]

我想得到:

c = [[1,2,3],[6,9,10]]

其中c是 b 中的前 2 個列表,其中ba實例最多。 這些可能很大,因此性能可能是一個問題。

不確定這是否會有所不同,但每個元素在 a 和整個 b 中只出現一次,並且是 integer。

heapq 模塊有一個最大的nlargest可以有效地從列表中獲取前n值,而無需對整個內容進行排序。 使用集合來獲取a中的值與每個子列表的交集:

from heapq import nlargest


a = [10,9,1,2,3,4] 


b = [[1,2,3],[6,9,10],[4,5,7,8]]

aSet = set(a)
c    = nlargest(2,b,key=lambda n:len(aSet.intersection(n)))

print(c)

[[1, 2, 3], [6, 9, 10]]

暫無
暫無

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

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