Pythonでタプルのリスト内の双方向ペアをカウントする方法
タプルのリストの中に、互いに逆順の関係にある「双方向ペア」がいくつ含まれているかを調べたい場面は少なくありません。その場合は、ネストしたループでリストを反復処理しながら、2つのタプルの要素が入れ替わった関係になっているかを「AND」演算で判定するのが基本的なアプローチです。
以下に具体的な実装例を示します。
サンプルコード
my_list = [(45, 67), (11, 23), (67, 45), (23, 11), (0, 9), (67, 45)]
print("The list is : ")
print(my_list)
my_result = 0
for idx in range(0, len(my_list)):
for iidx in range(idx + 1, len(my_list)):
if my_list[iidx][0] == my_list[idx][1] and my_list[idx][1] == my_list[iidx][0]:
my_result += 1
print("The count of bidirectional pairs are : ")
print(my_result)
実行結果
The list is : [(45, 67), (11, 23), (67, 45), (23, 11), (0, 9), (67, 45)] The count of bidirectional pairs are : 3
コードの解説
まず、タプルのリストを定義し、コンソールに表示します。
カウント結果を格納する変数を 0 で初期化します。
外側と内側の2重ループにより、リスト内のすべてのタプルの組み合わせを比較します。
内側のループは外側の現在位置の次の要素から開始するため、同じペアを重複して数えることがありません。
「AND」演算によって、一方のタプルの先頭要素がもう一方の末尾要素と一致し、かつその逆も成立するかどうかを確認します。
条件を満たすペアが見つかるたびに、結果変数をインクリメントします。
最後に、合計カウントをコンソールに出力します。
補足:itertools.combinations を使った簡潔な書き方
標準ライブラリの itertools.combinations を利用すると、同じ処理をより短く、読みやすいコードで実現できます。
from itertools import combinations
my_list = [(45, 67), (11, 23), (67, 45), (23, 11), (0, 9), (67, 45)]
my_result = sum(
1 for a, b in combinations(my_list, 2)
if a[0] == b[1] and a[1] == b[0]
)
print("The count of bidirectional pairs are : ")
print(my_result)
この方法でも同じく 3 という結果が得られます。ネストしたループを自分で書く必要がなく、処理の意図も明確になるため、実務ではこちらのスタイルが推奨されます。
-
Pythonでタプル内の特定要素の出現回数をカウントする方法を徹底解説
この記事では、ユーザーが入力したタプルの中に、指定した要素が何回出現するかを数えるPythonプログラムを紹介します。初心者にもわかりやすいように、アルゴリズムの手順・サンプルコード・実行結果を順番に解説していきます。 例 入力: A = [10, 20, 30, 40, 10, 100, 80, 10] X = 10 出力: 3 この例では、リスト(タプル)内に「10」が3つ含まれているため、出力は「3」になります。 アルゴリズム 出現回数をカウントする関数 countoccur(A, x) の処理手順は以下の通りです(Aは配列、xは出現回数を数えたい要素)。 ステップ1
-
Pythonで3Dリスト(3次元配列)を作成する方法【サンプルコード付き】
3Dリストとは、いわゆる3次元配列のことです。本記事では、Pythonで3Dリストを作成し、その内容を整形して出力するプログラムを解説します。ここでは例として、文字列「*」を初期値とする3×2×2の3次元リストを生成しますが、仕組みを理解すれば整数など任意の要素を持つ配列にも簡単に応用できます。 3Dリストのイメージ 3次元リストは、リストの中にリスト、さらにその中にリストが入った多段構造のデータです。たとえば、3×3×2の3Dリストは次のように表現できます。 [[1,1,1],[2,2,2],[3,3,3]], [[4,4,4],[5,5,5],[6,6,6]] アルゴリズム ステップ1: