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

タプルを任意のキーで昇順にソートするPythonプログラム

タプルのリストが与えられたとき、任意の要素(キー)を基準として昇順に並べ替えることを考えます。この処理にはPython組み込みのsorted()関数を使用し、key引数に「どのインデックスの値で比較するか」を返す関数を渡すことで、指定したキーに従ったソートを実現します。

入力: A = [(2, 55), (1, 20), (4, 40), (2, 30)]
      k = 0
出力: [(1, 20), (2, 30), (2, 55), (4, 40)]

この例では、各タプルの0番目(先頭)の要素をキーとして昇順にソートしています。その結果、先頭の値が小さい順にタプルが並べ替えられます。

アルゴリズム

ステップ1: ソートに使用するキーとなるインデックス(k)を決める。
ステップ2: 組み込み関数sorted()を使い、key引数に「タプルのk番目の値を返す関数」を指定して並べ替える。
ステップ3: ソート済みのリストを表示する。

サンプルコード

# タプルのリストを任意のキーで
# 昇順にソートするPythonプログラム

# 指定したインデックスの値を取得する関数
def data(n):
    return n[k]

# タプルをソートする関数
def tuplesort(tup):
    # ユーザー定義関数 data を key として渡す
    return sorted(tup, key=data)

# ドライバーコード
a = [(230, 456, 120), (205, 414, 39), (89, 410, 213)]
k = int(input("インデックスを入力してください ::>"))
print("ソート結果:")
print(tuplesort(a))

出力

インデックスを入力してください ::>2
ソート結果:
[(205, 414, 39), (230, 456, 120), (89, 410, 213)]

この実行例では、各タプルの2番目の要素(120、39、213)をキーとして比較しているため、39 → 120 → 213 の順に並べ替えられています。

lambda式を使った簡潔な書き方

専用の関数を定義しなくても、lambda式をkeyに直接渡すことで同じ処理をより簡潔に記述できます。

k = 2
a = [(230, 456, 120), (205, 414, 39), (89, 410, 213)]
result = sorted(a, key=lambda x: x[k])
print(result)
# [(205, 414, 39), (230, 456, 120), (89, 410, 213)]

sorted()は元のリストを変更せず、新しいソート済みリストを返す点にも注目してください。元のリスト自体を並べ替えたい場合は、代わりにlist.sort(key=lambda x: x[k])メソッドを使用します。

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

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

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

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