Pythonでリストから昇順に並んだタプルだけを抽出する方法
Pythonでは、リスト内包表記と sorted メソッド、tuple メソッド、そして == 演算子を組み合わせることで、「要素がすでに昇順に並んでいるタプル」だけを簡単に抽出できます。
抽出の仕組み
各タプルに対して sorted() を適用すると、要素が昇順に並べ替えられた新しいリストが返されます。これを tuple() でタプルに戻し、元のタプルと == で比較することで、元のタプルがすでにソート済み(順序付き)であるかどうかを判定できます。この条件をリスト内包表記のフィルタとして使うのがポイントです。
サンプルコード
以下に具体的な実装例を示します。
my_list = [(15, 74, 36, 22, 54), (13, 24, 56), (59, 60, 34), (42, 65, 56), (99, 91)]
print("元のリスト:")
print(my_list)
# ソートしても変化しない(=昇順に並んでいる)タプルのみを抽出
my_result = [element for element in my_list if tuple(sorted(element)) == element]
print("抽出結果:")
print(my_result)
実行結果
元のリスト: [(15, 74, 36, 22, 54), (13, 24, 56), (59, 60, 34), (42, 65, 56), (99, 91)] 抽出結果: [(13, 24, 56)]
処理の流れの解説
まず、整数のタプルを複数含むリストを定義し、コンソールに表示します。
リスト内包表記を使ってリストの各要素を走査し、それぞれのタプルを
sorted()でソートした後、tuple()でタプルに変換して元のタプルと比較します。両者が一致する場合、そのタプルは「すでに昇順に並んでいる」と判断され、結果として新しいリストに格納されます。
上記の例では、
(13, 24, 56)のみが昇順に並んでいるため、これだけが出力されています。
補足ポイント
sorted(element) == list(element)のようにリスト同士で比較しても同じ結果が得られますが、タプル同士で比較する方が意図が明確です。降順に並んだタプルを抽出したい場合は、
sorted(element, reverse=True)を使うことで応用できます。この手法は計算量が O(n log n)(各タプルのソート分)となるため、非常に大きなデータセットではパフォーマンスに注意が必要です。
-
Pythonで辞書をタプルのリストに変換する3つの方法
Pythonでは、あるコレクション型から別のコレクション型への変換は非常によく行われる操作です。データ処理の要件によっては、辞書に格納されたキーと値のペアを、タプルとしてリストに変換する必要が生じることがあります。この記事では、その実現方法をいくつか紹介します。 items()メソッドとリスト内包表記を使う方法 最もシンプルでPythonらしい方法は、辞書のitems()メソッドをリスト内包表記と組み合わせて使うことです。各キーと値のペアを直接タプル化し、それらをまとめてリストとして生成できます。 サンプルコード Adict = {30:Mon,11:Tue,19:Fri} # 対象とな
-
Pythonのタプルリストから要素の出現頻度を求める方法
Pythonでは、さまざまな種類のデータコンテナが混在することがよくあります。たとえば、リストの各要素がタプルになっているケースです。本記事では、このような「タプルを要素とするリスト」から、特定の要素が出現する頻度(出現回数)を求める2つの方法を紹介します。 方法1:count() と map() を使う まず、ラムダ式(lambda)を使ってリスト内の各タプルの先頭要素を取り出し、map() 関数でそれらをまとめたうえで、count() を適用して目的の要素の合計出現回数を取得します。 コード例 # タプルのリストを初期化 listA = [(Apple, Mon), (Banana, Tu