Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで任意のキーを指定してタプルを昇順にソートする方法

このチュートリアルでは、Pythonを使ってタプルのリストを「n番目の要素」を基準に昇順へ並べ替える方法を解説します。

例えば、[(2, 2), (1, 2), (3, 1)] というタプルのリストがあるとします。ここで0番目の要素を基準にソートすると、出力は [(1, 2), (2, 2), (3, 1)] のようになります。

この処理には sorted 関数を使用します。sorted 関数にリストを渡す際、key 引数に関数を指定することで、どの要素を基準に並べ替えるかを制御できます。このkeyとして使うのが、ソートの基準となるインデックスです。

sorted 関数はリストを受け取り、昇順に並べ替えた新しいリストを返します。降順で取得したい場合は、reverse キーワード引数に True を設定してください。

アルゴリズム

問題を解くための手順は以下の通りです。

1. タプルのリストと基準となるキー(インデックス)を初期化する
2. 関数を定義する
   2.1. タプルのkey番目の要素を返す
3. タプルのリストと関数をsorted関数に渡す
   ※ 関数名はキーワード引数keyに指定する。
   sorted関数は各要素(ここではタプル)を関数に渡し、
   関数はそのタプルのkey番目の値を返す。
4. 結果を出力する

コード例

## タプルのリスト
tuples = [(2, 2), (1, 2), (3, 1)]
## 基準となるキー(インデックス)
key = 0
## タプルからkey番目の要素を返す関数
def k_th_index(one_tuple):
    return one_tuple[key]
## sorted関数を呼び出し
## 第1引数にタプルのリストを渡す
## 関数はキーワード引数 **key** に指定する
sorted(tuples, key = k_th_index)

実行結果

上記のプログラムを実行すると、次のような結果が得られます。

[(1, 2), (2, 2), (3, 1)]

なお、keyに len(tuple) - 1 を超えるインデックスを指定すると、IndexErrorが発生します。実際に確認してみましょう。

IndexErrorが発生する例

## タプルのリスト
tuples = [(2, 2), (1, 2), (3, 1)]
## len(tuple) - 1 より大きいキーを指定
key = 2
## タプルからkey番目の要素を返す関数
def k_th_index(one_tuple):
    return one_tuple[key]
## sorted関数を呼び出し
## 第1引数にタプルのリストを渡す
## 関数はキーワード引数 **key** に指定する
sorted(tuples, key = k_th_index)

実行結果

上記のプログラムを実行すると、次のようなエラーが出力されます。

IndexError                                Traceback (most recent call last)
<ipython-input-13-4c3fa14880dd> in <module>
     13 ## pass the list of tuples as first argument
     14 ## give the function as a keyword argument to the **key**
---> 15 sorted(tuples, key = k_th_index)
<ipython-input-13-4c3fa14880dd> in k_th_index(one_tuple)
      8 ## function which returns the key-th index number from the tuple
      9 def k_th_index(one_tuple):
---> 10     return one_tuple[key]
     11 
     12 ## calling the sorted function
IndexError: tuple index out of range

このように、基準となるインデックスが len(tuple) - 1 を超えない限り、このプログラムは任意の個数・任意のサイズのタプルに対して正しく動作します。

まとめ

今回は、Pythonの sorted 関数と key 引数を組み合わせることで、タプルのリストを任意の位置の要素を基準に昇順へソートする方法を学びました。降順にしたい場合は reverse=True を指定するだけなので、ぜひ試してみてください。このチュートリアルについて質問がある場合は、コメント欄でお気軽にお尋ねください。

  1. Pythonでカクテルソート(双方向バブルソート)を実装する方法

    この記事では、カクテルソート(Cocktail Sort)をPythonで実装する方法について解説します。サンプルコードと実行結果を通じて、アルゴリズムの仕組みをわかりやすく説明していきます。 カクテルソートとは カクテルソートは「双方向バブルソート」とも呼ばれるソートアルゴリズムです。通常のバブルソートが一方向のみの走査を行うのに対し、カクテルソートはリストを左右両方向に交互に走査しながら要素を並べ替えていく点が特徴です。 アルゴリズムの手順 1. 左から右への走査 まず配列を左から右へ走査します。走査中は隣接する要素同士を比較し、条件を満たしていれば値を入れ替えます。この処理により、配列内

  2. Pythonで学ぶ選択ソートの基本原理と実装方法をわかりやすく解説

    本記事では、選択ソート(Selection Sort)の基本的な仕組みと、Python 3.xでの実装方法について詳しく解説します。 選択ソートとは? 選択ソートは、ソートされていない部分から最小値の要素を繰り返し見つけ出し、それを先頭に移動させることで配列全体を整列していくアルゴリズムです。処理の過程では、与えられた配列が次の2つの部分配列に分けられます。 すでにソートが完了している部分配列 まだソートされていない部分配列 選択ソートの各イテレーション(反復処理)では、未ソート部分から最小要素を取り出し、ソート済み部分の末尾に挿入していきます。この操作を繰り返すことで、最終的に配列全体