I have a list:
a = [10,9,1,2,3,4]
And a list of lists:
b = [[1,2,3],[6,9,10],[4,5,7,8]]
I want to get:
c = [[1,2,3],[6,9,10]]
Where c
is the list of top 2 lists in b
with the most instances in a
.
These can be large, so performance could be an issue.
Not sure if this makes a differences, but each element is present only once in a and the entirety of b and is an integer.
>Solution :
The heapq module has a nlargest
function that will efficiently get you the top n
values from a list without sorting the whole thing. Use a set to get the intersection of values in a
with each sub list:
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]]