15

kソートされていない数字のリストから最大の数字を返すことができる Python のコードを探していnます。最初にリストをソートしてこれを行うことを考えましたが、これは非常にかさばる可能性があります。

たとえば、k最大数を見つけたいリストはlist1

> list1 = [0.5, 0.7, 0.3, 0.3, 0.3, 0.4, 0.5]

ここでn = 7k = 3つまり、7つの数字のリストから最大の3つの数字を見つけたい場合、出力は次のようになります0.5, 0.7, 0.5

これはどのように行うことができますか?

4

5 に答える 5

31

Pythonにはすべてのバッテリーが含まれています-heapqモジュールを使用してください:)

from heapq import nlargest

data = [0.5, 0.7, 0.3, 0.3, 0.3, 0.4, 0.5]
print nlargest(3, data)

また、部分ヒープソートを使用しているため、配列全体をソートするよりも高速です

于 2013-07-28T10:21:03.723 に答える
3

を変更したくないと仮定するとlist1ソートされたコピーを作成します。

In [1]: list1 = [0.5, 0.7, 0.3, 0.3, 0.3, 0.4, 0.5]

In [2]: list2 = sorted(list1)

In [3]: list2
Out[3]: [0.3, 0.3, 0.3, 0.4, 0.5, 0.5, 0.7]

ではlist2、最大の数値が最後の数値であるため、スライスを使用します。

In [4]: list2[-3:]
Out[4]: [0.5, 0.5, 0.7]

私が追加したリンクは Pythons documentationを指しています。初心者の方は、チュートリアルをご覧になることから始めてください。その後、ライブラリ リファレンスが最も必要になります。これは、大規模な標準ライブラリが Python を優れたものにしている理由の 1 つであるためです。

于 2013-07-28T10:11:33.570 に答える
3

次のように実行できます。

>>> list1
[0.5, 0.7, 0.3, 0.3, 0.3, 0.4, 0.5]
>>> list2 = list1[:] #make a copy of list1
>>> k = 3
>>> result = []
>>> for i in range(k):
        result.append(max(list2)) #append largest element to list of results
        list2.remove(max(list2)) # remove largest element from old list
>>> result
[0.7, 0.5, 0.5]
>>> 
于 2013-07-28T10:07:48.313 に答える