Pythonでリストの最大値・最小値から順にn個の要素を取得

Pythonでリスト(配列)の最大値・最小値から順にn個の要素を取得したい場合、n=1であれば、組み込み関数max(), min()、n>1であれば、リストをソート(並び替え)する方法と標準ライブラリのheapqモジュールを使う方法があります。

最大値・最小値を取得: max(), min() 最大値・最小値から順にn個の要素を取得: ソート 最大値・最小値から順にn個の要素を取得: heapqモジュール

取得する要素の個数が多い場合はsorted()やsort()で先にソートするほうが効率的で、少ない場合はheapqモジュールのnlargest(), nsmallest()が効率的。

最大値・最小値を取得: max(), min()

リストの最大値・最小値となる要素を取得するには組み込み関数max(), min()を使います。

l = [3, 6, 7, -1, 23, -10, 18]

print(max(l))
# 23

print(min(l))
# -10

最大値・最小値から順にn個の要素を取得: ソート

リストの最大値・最小値から順にn個の要素を取得したい場合、まずリストをソート(並び替え)する方法があります。 リストをソートするには、組み込み関数sorted()か、リストのsort()メソッドを使います。sorted()はソートされた新たなリストを返し、sort()は元のリストを並び替える。 昇順・降順を引数reverseで切り替え、先頭から任意の個数をスライスで選択すれば、リストの最大値・最小値から順にn個の要素を取得できます。

ld = sorted(l, reverse=True)
print(ld)
# [23, 18, 7, 6, 3, -1, -10]

print(ld[:3])
# [23, 18, 7]

la = sorted(l)
print(la)
# [-10, -1, 3, 6, 7, 18, 23]

print(la[:3])
# [-10, -1, 3]

一行にまとめて書いても問題ありません。

print(sorted(l, reverse=True)[:3])
# [23, 18, 7]

print(sorted(l)[:3])
# [-10, -1, 3]

元のリストの順番が変わっても問題なければ、sort()メソッドでもよい。

print(l)
# [3, 6, 7, -1, 23, -10, 18]

l.sort(reverse=True)
print(l[:3])
# [23, 18, 7]

print(l)
# [23, 18, 7, 6, 3, -1, -10]

l.sort()
print(l[:3])
# [-10, -1, 3]

print(l)
# [-10, -1, 3, 6, 7, 18, 23]

最大値・最小値から順にn個の要素を取得: heapqモジュール

リストの最大値・最小値から順にn個の要素を取得したい場合、 heapqモジュールを使う方法もあります。

8.5. heapq — ヒープキューアルゴリズム — Python 3.6.3 ドキュメント

heapqモジュールの関数nlargest(), nsmallest()を使います。この場合、元のリストは変更されません。 第一引数に取得する要素の個数、第二引数に対象とするイテラブル(リストなど)を指定します。

import heapq

l = [3, 6, 7, -1, 23, -10, 18]

print(heapq.nlargest(3, l))
# [23, 18, 7]

print(heapq.nsmallest(3, l))
# [-10, -1, 3]

print(l)
# [3, 6, 7, -1, 23, -10, 18]

最初に書いたように、取得する要素の個数が多い場合はsorted()やsort()で先にソートするほうが効率的で、少ない場合はheapqモジュールのnlargest(), nsmallest()が効率的。

Last Updated: 6/26/2019, 10:34:03 PM