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

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) を使用すると便利です。


  1. 【Python】タプルが出現するまでリスト内の要素数をカウントする方法

    リストAが与えられたとき、このリストにはネストされたタプルが含まれています。ここでの課題は、タプルの要素に到達するまで、リスト内の要素数をカウントすることです。この処理には、Python組み込みの isinstance() 関数を使用します。 isinstance() 関数は2つの引数を受け取ります。第1引数の「object」は判定対象となるオブジェクト、第2引数の「classinfo」はクラス・型、あるいはクラスや型のタプルです。オブジェクトが指定したクラス(またはそのサブクラス)のインスタンスである場合、もしくはタプル内のいずれかの型に一致する場合に True を返し、それ以外の場合は F

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

    ネストされたリスト(リストの中にリストが入っている構造)が与えられたとき、各サブリストの2番目の要素を基準にして全体を並べ替えるのが本記事の目的です。ここでは、最も基本的なソートアルゴリズムである「バブルソート」を使った実装方法を解説します。 実行例 入力 : [[CCC, 15], [AAA, 10], [RRRR, 2],[XXXX, 150]] 出力 : [[RRRR, 2], [AAA, 10], [CCC, 15], [XXXX, 150]] アルゴリズムの手順 ステップ1:対象となるリストを受け取る。 ステップ2:ネストされたループを使い、サブリストの2番目の要素にアクセスできるよ