Python: take max N elements from some list

前端 未结 4 1382
后悔当初
后悔当初 2020-12-05 13:41

Is there some function which would return me the N highest elements from some list?

I.e. if max(l) returns the single highest element, sth. like m

相关标签:
4条回答
  • 2020-12-05 13:47

    A fairly efficient solution is a variation of quicksort where recursion is limited to the right part of the pivot until the pivot point position is higher than the number of elements required (with a few extra conditions to deal with border cases of course).

    The standard library has heapq.nlargest, as pointed out by others here.

    0 讨论(0)
  • 2020-12-05 13:49

    Start with the first 10 from L, call that X. Note the minimum value of X.

    Loop over L[i] for i over the rest of L.

    If L[i] is greater than min(X), drop min(X) from X and insert L[i]. You may need to keep X as a sorted linked list and do an insertion. Update min(X).

    At the end, you have the 10 largest values in X.

    I suspect that will be O(kN) (where k is 10 here) since insertion sort is linear. Might be what gsl uses, so if you can read some C code:

    http://www.gnu.org/software/gsl/manual/html_node/Selecting-the-k-smallest-or-largest-elements.html

    Probably something in numpy that does this.

    0 讨论(0)
  • 2020-12-05 13:57

    The function in the standard library that does this is heapq.nlargest

    0 讨论(0)
  • 2020-12-05 14:11

    heapq.nlargest:

    >>> import heapq, random
    >>> heapq.nlargest(3, (random.gauss(0, 1) for _ in xrange(100)))
    [1.9730767232998481, 1.9326532289091407, 1.7762926716966254]
    
    0 讨论(0)
提交回复
热议问题