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

Pythonでサブリストの2番目の要素に基づいてリストをソートする方法

リストが与えられたとき、そのサブリストの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: 現在の要素が次の要素より大きい場合は、両者を入れ替える。

サンプルコード

以下のコードでは、3つ目の変数(一時変数)を使用してリスト内の要素を直接入れ替える「インプレース」方式でソートを行っています。

# Python program to sort the lists using the second element of sublist
# In place way to sort, use of third variable.
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
   # Driver Code
   A =[['AAA', 10], ['CCC', 15], ['RRRR', 2], ['XXXX', 150]]
   print(sortlist(A))

実行結果

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

補足:より簡潔な代替手段

実際の開発現場では、Pythonの組み込み関数 sorted() やリストの sort() メソッドに key 引数を指定する方法がより一般的です。例えば、sorted(A, key=lambda x: x[1]) と書くだけで、同じ結果を1行で得ることができます。ただし、ソートアルゴリズムの仕組みを学ぶ目的であれば、上記のようなバブルソートの自前実装は非常に良い練習になります。

  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