Pythonでリストをすべての可能なタプルペアに分割する方法
Pythonでリストをすべての可能なタプルペアの組み合わせに分割したい場合があります。そのようなときは、リストを引数として受け取り、リスト内包表記でリストを走査しながら「extend」メソッドを活用する関数を定義すると便利です。
サンプルコード
以下に具体的な実装例を示します。
def determine_pairings(my_list):
if len(my_list) <= 1:
return [my_list]
result = [[my_list[0]] + element for element in determine_pairings(my_list[1:])]
for index in range(1, len(my_list)):
result.extend([[(my_list[0], my_list[index])] + element for element in determine_pairings(my_list[1: index] + my_list[index + 1:])])
return result
my_list = [56, 31, 78, 0]
print("The list is :")
print(my_list)
my_result = determine_pairings(my_list)
print("The resultant pairs are :")
print(my_result)
出力結果
The list is : [56, 31, 78, 0] The resultant pairs are : [[56, 31, 78, 0], [56, 31, (78, 0)], [56, (31, 78), 0], [56, (31, 0), 78], [(56, 31), 78, 0], [(56, 31), (78, 0)], [(56, 78), 31, 0], [(56, 78), (31, 0)], [(56, 0), 31, 78], [(56, 0), (31, 78)]]
コードの解説
「determine_pairings」という名前の関数を定義し、リストを引数として受け取ります。
まずリストの長さが1以下かどうかをチェックし、該当する場合はそのリストをそのまま返します(再帰の終了条件)。
先頭の要素を除いた残りの要素に対して同じ関数を再帰的に呼び出し、その結果を変数に格納します。
続いてリストを再度走査し、先頭の要素と各インデックスの要素をタプルとしてペアにした組み合わせを生成します。
生成されたすべてのパターンを「extend」メソッドで結果リストに追加し、最終的な結果として返します。
処理のポイント
この関数は再帰的に動作するのが特徴です。まず先頭の要素を単独のまま残すパターンを生成し、次に先頭の要素と他の各要素をタプルとしてペアにするパターンを順番に作成していきます。これにより、リスト内の要素ペアの組み合わせがもれなく網羅され、すべての可能な分割パターンを取得できます。
-
Pythonでリストをタプルに変換する方法
Pythonでは、リストをタプルに変換するのは非常に簡単です。組み込み関数である tuple() 関数にリストを引数として渡すだけで、変換することができます。サンプルコードmy_list = [1, 2, 3] my_tuple = tuple(my_list) print(my_tuple)出力結果上記のコードを実行すると、以下のような出力が得られます。(1, 2, 3)解説tuple() 関数は、リストだけでなく文字列や辞書などのイテラブル(反復可能なオブジェクト)もタプルに変換できます。タプルはリストと異なりイミュータブル(変更不可)であるため、データを誤って書き換えたくない場合や、辞書
-
Pythonでリストを均等なサイズのチャンクに分割する方法
スライス演算子を使った基本的な方法 リストを均等なサイズのチャンクに分割する最も簡単な方法は、スライス演算子を繰り返し使用し、開始位置と終了位置を固定数ずつずらしていくことです。 次の例では、12個の要素を持つリストを、長さ4の3つのリストに分割しています。 l = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120] x = 0 y = 12 for i in range(x, y, 4): x = i print(l[x:x+4]) 実行結果: [10, 20, 30, 40] [50, 60, 70, 80] [90,