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]]
c is the list of top 2 lists in
b with the most instances in
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.
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]]