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

サブリストの2番目の要素を基準にリストをソートするPythonプログラム

ネストされたリスト(リストの中にリストが入っている構造)が与えられたとき、各サブリストの2番目の要素を基準にして全体を並べ替えるのが本記事の目的です。ここでは、最も基本的なソートアルゴリズムである「バブルソート」を使った実装方法を解説します。

実行例

入力 : [['CCC', 15], ['AAA', 10], ['RRRR', 2],['XXXX', 150]]
出力 : [['RRRR', 2], ['AAA', 10], ['CCC', 15], ['XXXX', 150]]

アルゴリズムの手順

ステップ1:対象となるリストを受け取る。
ステップ2:ネストされたループを使い、サブリストの2番目の要素にアクセスできるようにする。
ステップ3:配列内のすべての要素を順番に走査する。
ステップ4:末尾のi個の要素は、すでに正しい位置に配置されているものとして扱う。
ステップ5:配列を0から n-i-1 の範囲で走査する。
ステップ6:現在の要素が次の要素より大きければ、2つの要素を入れ替える。

サンプルコード(バブルソート版)

# サブリストの2番目の要素を基準にリストをソートするPythonプログラム
# 第3の変数を使ったインプレース(破壊的)ソート
def sortlist(A):
    l = len(A)
    for i in range(0, l):
        for j in range(0, l - i - 1):
            if A[j][1] > A[j + 1][1]:
                tempo = A[j]
                A[j] = A[j + 1]
                A[j + 1] = tempo
    return A

# ドライバーコード
A = [['AAA', 10], ['CCC', 15], ['RRRR', 2], ['XXXX', 150]]
print(sortlist(A))

実行結果

[['RRRR', 2], ['AAA', 10], ['CCC', 15], ['XXXX', 150]]

このコードでは、隣り合うサブリスト同士を比較し、2番目の要素(A[j][1])の大小関係に応じて入れ替えを行っています。ループが完了した時点で、リスト全体が2番目の要素の昇順に整列されます。

より簡潔な方法:sorted()関数とlambdaを使う

実際の開発では、Pythonの組み込み関数 sorted() を使うことで、同じ処理をわずか1行で実現できます。key 引数に lambda 式を渡し、サブリストのインデックス1(2番目の要素)をソート基準に指定するだけです。

A = [['AAA', 10], ['CCC', 15], ['RRRR', 2], ['XXXX', 150]]

# 2番目の要素を基準に昇順ソート
result = sorted(A, key=lambda x: x[1])
print(result)
[['RRRR', 2], ['AAA', 10], ['CCC', 15], ['XXXX', 150]]

sorted() は元のリストを変更せず新しいリストを返すため安全であり、可読性・パフォーマンスの両面でも優れています。降順に並べ替えたい場合は reverse=True を追加するだけで対応できます。

  1. 【Python】リストから最大値・最小値・2番目に大きい値・2番目に小さい値を求める方法

    この記事では、Pythonを使ってリスト(配列)の中から最大値、最小値、2番目に大きい値(second largest)、2番目に小さい値(second smallest)を一度に見つけるプログラムを解説します。ソートを行わずに1回のループで処理できるのがポイントです。アルゴリズム全体の流れは以下の3ステップです。ステップ1:リストの要素を入力する ステップ2:各要素を取り出し、リスト内の他の数値と順に比較する ステップ3:最大値・最小値・2番目に大きい値・2番目に小さい値を取得して表示するサンプルコード# リスト内の最大値・最小値・2番目に大きい値・2番目に小さい値を求める def maxm

  2. 要素の長さに基づいてリストをソートするPythonプログラム

    この記事では、ユーザーが入力したリストを、各要素の長さ(文字数)に基づいてソートする方法を解説します。Pythonには標準で用意されている組み込み関数 sorted() を使うことで、シンプルなコードで実現できます。 例 入力::[mona,pp,aaa] それぞれの長さは [4,2,3] したがって、ソート後の並び順は [2,3,4] 出力::[pp,aaa,mona] アルゴリズム ステップ1: リストの要素を入力する。 ステップ2: sorted(A, key=len) 関数を適用する。 サンプルコード # リストをソートする def sortedlist(A): ne