Pythonで類似するタプルの出現回数を記録・集計する方法
Pythonでリスト内に含まれる「似たようなタプル」の出現回数を記録したい場合には、map関数、Counterクラス、そしてsorted関数を組み合わせるのが効果的です。
まず前提として、リストは異種の値(整数、浮動小数点数、文字列など、あらゆるデータ型の値)を格納できるデータ構造です。「タプルのリスト」とは、リストの中に複数のタプルが格納されたものを指します。
使う機能とそれぞれの役割
map関数
map関数は、指定した関数や処理をイテラブル(リストやタプルなど)のすべての要素に対して適用し、その結果を返します。
sorted関数
sorted関数は、リストなどの要素を並べ替えるために使用されます。今回のようにタプル内の要素を昇順にソートすることで、「同じ要素を持つが並び順が異なるタプル」も同一のものとして扱えるようになります。
Counterクラス
Counterはcollectionsモジュールのサブクラスで、ハッシュ可能なオブジェクトの出現回数を数えるためのものです。呼び出されると、渡されたイテラブル(リストやタプルなど)をもとに自動的にハッシュテーブルを作成します。
結果として、カウントがゼロでないすべての要素とその出現回数を返します。
サンプルコード
from collections import Counter
my_list_1 = [(11, 14), (0, 78), (33, 67), (89, 0)]
print("タプルのリスト:")
print(my_list_1)
my_result = dict(Counter(tuple(elem) for elem in map(sorted, my_list_1)))
print("類似タプルの出現頻度:")
print(my_result)
実行結果
タプルのリスト:
[(11, 14), (0, 78), (33, 67), (89, 0)]
類似タプルの出現頻度:
{(11, 14): 1, (0, 78): 1, (33, 67): 1, (0, 89): 1}
コードの解説
- 必要なパッケージとして、collectionsモジュールから
Counterをインポートします。 - タプルのリストを定義し、コンソールに表示します。
map(sorted, my_list_1)により、リスト内の各タプルの要素が昇順に並べ替えられます。これにより、例えば(89, 0)は(0, 89)として扱われ、並び順の違いによる重複を吸収できます。- 並べ替え後のタプルに対して
Counterを適用することで、各タプルの出現回数を集計します。 - その結果を
dictに変換し、変数に代入します。 - 最後に、集計結果をコンソールに表示します。
このように、sorted → map → Counter の流れを組み合わせることで、要素の並び順に左右されずに「類似するタプル」の出現頻度を簡単に集計できます。データの前処理や重複分析など、さまざまな場面で応用できるテクニックです。
-
Pythonでタプルのリストからタプルを組み合わせる方法
データ分析では、Pythonが提供するさまざまなデータ構造を組み合わせて扱うことがよくあります。リストにはタプルを要素として格納できるため、「リストの中にタプルがある」という構造も簡単に作れます。本記事では、タプルの各要素を別の要素と組み合わせて、新しい「タプルの組み合わせリスト」を生成する方法を、具体的なコード例とともに解説します。方法1:forループ(リスト内包表記)を使うまずは最も基本的な方法です。リスト内包表記の中でforループをネストし、各タプルからリスト部分の要素を1つずつ取り出しながら、同じタプル内のもう1つの要素(ここでは曜日の文字列)とペアを作成していきます。コード例Alis
-
【Python入門】リスト・タプル・辞書の違いを徹底解説
Pythonの3大コレクション:リスト、タプル、辞書 Pythonには複数のデータをまとめて扱うためのコレクション型が用意されています。中でもよく使われるのがリスト(list)、タプル(tuple)、辞書(dict)の3つです。それぞれ特徴が異なるため、用途に応じて使い分けることが重要です。 基本的な違いの概要 リストとタプルはシーケンス(順序付き)オブジェクトであり、要素を順番に並べて管理します。一方、辞書はキーと値のペアを格納するハッシュテーブル構造です。 リストとタプルは「順序を持つコレクション」ですが、辞書は「順序を持たないコレクション」として扱われます。 リストと辞書はミュータブ