Python

【Python】リスト内の最大値や最小値のインデックスを取得する

MAX

Pythonのリストから、最大値や最小値の要素のインデックス番号を取得する。

最大値、最小値が必ずしも1個とは限らないため、複数取得する方法も説明する。

スポンサーリンク

最大値・最小値となる最初の要素のインデックスを取得する

最大値や最小値の数に関わらず、最大値・最小値となる要素のうち、インデックス番号が一番小さいものを取得する。

この方法は非常にシンプル。

1numbers = [1, 2, 3, 2, 1, 3]
2
3# 最大値となる最初のインデックスを取得
4# maxで要素の最大値を取得
5max_value = max(numbers)
6# indexで指定した値のインデックスを取得する。複数ある場合は最初のインデックス。
7max_index = numbers.index(max_value)
8print(max_index)
9# 2
10
11# 最小値となる最初のインデックスを取得
12# minで要素の最大値を取得
13min_value = min(numbers)
14# indexで指定した値のインデックスを取得する。複数ある場合は最初のインデックス。
15min_index = numbers.index(min_value)
16print(min_index)
17# 0

maxminindexを組み合わせて使うだけ。

もちろん、numbers.index(max(numbers))のように1行で書いてもOK。

要素の重複がない場合や、複数あっても最初のインデックスが取得できればOKという場合には、これでOK。

最大値・最小値となる要素のインデックスを全て取得する

最大値・最小値となる要素が複数ありその全てのインデックスが必要な時などに使う。

リスト内包表記と表記と表記と3公演算子を使うと、1行で書ける。

最大値・最小値と等しくなる要素があれば、そのインデックス番号をリストに格納していく。

max_value, min_valueについては3項演算子の中で計算するのではなく、予め計算して変数に格納しておいた方がいい(そんなことを気にした所で処理性能はほとんど変わらないが)。

1numbers = [1, 2, 3, 2, 1, 3]
2
3# 最大値となる最初のインデックスを取得
4max_value = max(numbers)
5# リスト内包表記と3項演算子で1行で処理を記載
6max_indices = [i for i, x in enumerate(numbers) if x == max_value]
7print(max_indices)
8# [2, 5]
9
10# 上記のリスト内包表記の部分は以下の処理と同じ
11max_indices = []
12for i, x in enumerate(numbers):
13    if x == max_value:
14        max_indices.append(x)
15
16# 最小値となる最初のインデックスを取得
17min_value = min(numbers)
18# リスト内包表記と3項演算子で1行で処理を記載
19min_indices = [i for i, x in enumerate(numbers) if x == min_value]
20print(min_indices)
21# [0, 4]

リスト内包表記とif文の3項演算子の書き方については以下の記事も参照。

あわせて読みたい
【Python】if文とfor文を1行で書く【リスト内包表記・3項演算子】
【Python】if文とfor文を1行で書く【リスト内包表記・3項演算子】

まとめ

1numbers = [1, 2, 3, 2, 1, 3]
2
3# 最大値となる最初の要素のインデックスを取得
4max_index = numbers.index(max(numbers))
5print(max_index)
6# 2
7
8# 最小値となる最初の要素のインデックスを取得
9min_index = numbers.index(min(numbers))
10print(min_index)
11# 0
12
13# 最大値となる全ての要素のインデックスを取得
14max_value = max(numbers)
15max_indices = [i for i, x in enumerate(numbers) if x == max_value]
16print(max_indices)
17# [2, 5]
18
19# 最小値となる全ての要素のインデックスを取得
20min_value = min(numbers)
21min_indices = [i for i, x in enumerate(numbers) if x == min_value]
22print(min_indices)
23# [0, 4]

スポンサーリンク
ABOUT ME
MAX
MAX
ITエンジニア、データサイエンティスト
新卒でSIerに入社し、フリーランスになってWEB系へ転向。
その後AIの世界へ足を踏み入れ、正社員に戻る。 テーブルデータの分析がメイン。
スポンサーリンク
記事URLをコピーしました