note.nkmk.me

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

Date: 2018-01-21 / tags: Python, リスト

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]

一行にまとめて書いてもOK。

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モジュールを使う方法もある。

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()が効率的。

スポンサーリンク
シェア
このエントリーをはてなブックマークに追加

関連カテゴリー

関連記事