Pythonで特定要素の個数に基づいて行列(ネストされたリスト)の行をソートする方法
Pythonでは、リスト内包表記と len メソッドを組み合わせることで、あらかじめ定義した「カスタムリスト」に含まれる要素の個数を基準に、行列(リストのリスト)の行を並べ替えることができます。
この記事では、その具体的な実装方法をサンプルコードとともに解説します。
サンプルコード
def get_count_matrix(my_key):
return len([element for element in my_key if element in custom_list])
my_list = [[31, 5, 22, 7], [85, 5], [9, 11, 22], [7, 48]]
print("元のリスト:")
print(my_list)
custom_list = [31, 85, 7]
my_list.sort(key=get_count_matrix)
print("ソート後のリスト:")
print(my_list)
実行結果
元のリスト: [[31, 5, 22, 7], [85, 5], [9, 11, 22], [7, 48]] ソート後のリスト: [[9, 11, 22], [85, 5], [7, 48], [31, 5, 22, 7]]
コードの解説
まず、
get_count_matrixという名前の関数を定義します。この関数は引数としてキー(各行のリスト)を受け取ります。関数内ではリスト内包表記を使って行の各要素を走査し、その要素が
custom_listに含まれているかどうかを判定します。custom_listに含まれる要素だけを集めたリストを作成し、lenメソッドでその長さ(該当要素の個数)を返します。関数の外側では、整数を要素とするリストのリスト(行列)を定義し、コンソールに表示します。
次に、ソート基準となる別の整数リスト
custom_listを定義します。ここでは[31, 85, 7]を指定しています。sortメソッドを呼び出す際、key引数に先ほど定義した関数を渡します。これにより、各行がcustom_listに含まれる要素の個数が少ない順に並べ替えられます。最後に、ソート結果をコンソールに出力して完了です。
ポイントまとめ
sortメソッドのkey引数に関数を渡すことで、任意の基準による柔軟なソートが可能になります。降順でソートしたい場合は、
my_list.sort(key=get_count_matrix, reverse=True)のようにreverse=Trueを指定します。元のリストを変更せずに新しいソート済みリストを取得したい場合は、
sorted(my_list, key=get_count_matrix)を使用すると便利です。
-
【Python】タプルが出現するまでリスト内の要素数をカウントする方法
リストAが与えられたとき、このリストにはネストされたタプルが含まれています。ここでの課題は、タプルの要素に到達するまで、リスト内の要素数をカウントすることです。この処理には、Python組み込みの isinstance() 関数を使用します。 isinstance() 関数は2つの引数を受け取ります。第1引数の「object」は判定対象となるオブジェクト、第2引数の「classinfo」はクラス・型、あるいはクラスや型のタプルです。オブジェクトが指定したクラス(またはそのサブクラス)のインスタンスである場合、もしくはタプル内のいずれかの型に一致する場合に True を返し、それ以外の場合は F
-
サブリストの2番目の要素を基準にリストをソートするPythonプログラム
ネストされたリスト(リストの中にリストが入っている構造)が与えられたとき、各サブリストの2番目の要素を基準にして全体を並べ替えるのが本記事の目的です。ここでは、最も基本的なソートアルゴリズムである「バブルソート」を使った実装方法を解説します。 実行例 入力 : [[CCC, 15], [AAA, 10], [RRRR, 2],[XXXX, 150]] 出力 : [[RRRR, 2], [AAA, 10], [CCC, 15], [XXXX, 150]] アルゴリズムの手順 ステップ1:対象となるリストを受け取る。 ステップ2:ネストされたループを使い、サブリストの2番目の要素にアクセスできるよ