What´s the most efficient, elegant and pythonic way of solving this problem?
Given a list (or set or whatever) of n elements, we want to get the k biggest ones. ( You can assume k<n/2
without loss of generality, I guess) For example, if the list were:
l = [9,1,6,4,2,8,3,7,5]
n = 9, and let's say k = 3. What's the most efficient algorithm for retrieving the 3 biggest ones? In this case we should get [9,8,7]
, in no particular order.
Thanks! Manuel
Suppose we have an unsorted array, we have to find the kth largest element from that array. So if the array is [3,2,1,5,6,4] and k = 2, then the result will be 5. We will sort the element, if the k is 1, then return last element, otherwise return array[n – k], where n is the size of the array.
The max() Function — Find the Largest Element of a List. In Python, there is a built-in function max() you can use to find the largest number in a list.
Use nlargest from heapq module
from heapq import nlargest lst = [9,1,6,4,2,8,3,7,5] nlargest(3, lst) # Gives [9,8,7]
You can also give a key to nlargest in case you wanna change your criteria:
from heapq import nlargest tags = [ ("python", 30), ("ruby", 25), ("c++", 50), ("lisp", 20) ] nlargest(2, tags, key=lambda e:e[1]) # Gives [ ("c++", 50), ("python", 30) ]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With