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

Python – ソート済みの行(サブリスト)をフィルタリングする方法

Pythonでは、ネストされたリスト(リストのリスト)の中から、昇順または降順のいずれかでソート済みの行だけを抽出したいケースがあります。そんなときは、リスト内包表記sorted()関数list()関数を組み合わせると、シンプルかつ効率的に実現できます。

実装例

my_list = [[99, 6, 75, 10], [1, 75, 2, 4, 99], [75, 15, 99, 2], [1, 4, 15, 99]]

print("元のリスト:")
print(my_list)

my_result = [sub for sub in my_list if sub == list(sorted(sub)) or sub == list(sorted(sub, reverse=True))]

print("フィルタリング後のリスト:")
print(my_result)

出力

元のリスト:
[[99, 6, 75, 10], [1, 75, 2, 4, 99], [75, 15, 99, 2], [1, 4, 15, 99]]
フィルタリング後のリスト:
[[1, 4, 15, 99]]

コードの解説

  • まず、複数のサブリストを持つネストされたリストを定義し、コンソールに表示します。

  • 次に、リスト内包表記を使って各サブリストを反復処理し、「昇順にソートした結果が元のリストと一致するか」、または「降順(reverse=True)にソートした結果と一致するか」を判定します。

  • sorted()関数はイテレータを返すため、比較の際にはlist()関数でリスト型に変換しています。これにより、元のリストと正しく等価比較ができます。

  • 条件を満たした要素のみが新しいリストとして変数に格納され、最終的にコンソールへ出力されます。

ポイント

この手法の利点は、昇順・降順のどちらで並んでいる行も一度に判定できる点です。データの前処理やバリデーションなど、リスト内の整列状態を確認したい場面で活用できます。なお、大量のデータを扱う場合は、リスト内包表記よりもジェネレータ式を使うことでメモリ使用量を抑えられることも覚えておくと良いでしょう。

  1. Pythonのラムダ式とfilter()関数を実例でわかりやすく解説

    この記事では、Python 3.x(およびそれ以前のバージョン)におけるラムダ式と filter() 関数について学びます。どちらの機能もPythonの標準ライブラリに組み込まれており、追加のインポートなしですぐに利用できます。 ラムダ式とは? ラムダ式を使うと、インライン関数(その場で定義する小さな関数)を簡潔に記述できます。ラムダ式は、キーワード lambda の後にカンマ区切りの引数リストと、それらの引数を使って評価される式を続けて記述します。 構文 lambda 引数: 式 戻り値: 引数を式に代入して計算された値が返されます。 ラムダ式には関数名を付けないため、「匿名関数(無名関数)

  2. Pythonでリストをソートする方法をわかりやすく解説

    Pythonのsortメソッドを使ったリストの並べ替えPythonでは、リストに対してsort()メソッドを呼び出すことで、要素を昇順に並べ替えることができます。内部的には、各クラスが持つ比較演算子(__gt__や__lt__)が使われており、文字列や数値などの組み込み型はあらかじめこれらが実装されているため、特別な設定なしに自動的にソートされた結果を得られます。実際の使用例を見てみましょう。words = [Hello, World, Foo, Bar, Nope] numbers = [100, 12, 52, 354, 25] words.sort() numbers.sort() p