Python – K番目のセグメントごとにクロス結合(交互マージ)する方法
2つのリストの要素を「K」個ずつ交互に組み合わせる(クロス結合する)処理が必要な場合があります。そんなときは、ジェネレータ関数を使ってインデックスを追跡しながら要素を順番に取り出すメソッドを定義すると、シンプルかつ効率的に実装できます。
本記事では、PythonでK番目のセグメント単位に2つのリストを交互にマージする方法を、具体的なコード例とともに解説します。
サンプルコード
以下は、2つのリストをK個ずつ交互に結合する実装例です。
def merge_pair_elem(my_list_1, my_list_2, K):
index_1 = 0
index_2 = 0
while(index_1 < len(my_list_1)):
for i in range(K):
yield my_list_1[index_1]
index_1 += 1
for i in range(K):
yield my_list_2[index_2]
index_2 += 1
my_list_1 = [24, 13, 82, 22, 65, 74]
my_list_2 = [55, 63, 17, 44, 33, 15]
print("The first list is :")
print(my_list_1)
print("The second list is :")
print(my_list_2)
K = 1
print("The value of K is :")
print(K)
my_result = [element for element in merge_pair_elem(my_list_1, my_list_2, K)]
print("The result is :")
print(my_result)
出力結果
The first list is : [24, 13, 82, 22, 65, 74] The second list is : [55, 63, 17, 44, 33, 15] The value of K is : 1 The result is : [24, 55, 13, 63, 82, 17, 22, 44, 65, 33, 74, 15]
コードの解説
merge_pair_elem という名前のメソッドを定義します。このメソッドは、2つのリストと「K」の値を引数として受け取ります。
メソッド内部では、各リスト用のインデックス変数(index_1、index_2)を0で初期化し、whileループの中で
yieldを使って要素を1つずつ生成します。これにより、最初のリストからK個、次に2つ目のリストからK個という順序で要素が交互に取り出されます。メソッドの外側では、整数のリストを2つ定義し、コンソールに表示しています。
交互に結合する単位となる「K」の値を定義し、こちらもコンソールに表示します。
リスト内包表記を使ってジェネレータを反復処理し、必要なパラメータを渡してメソッドを呼び出します。
生成された要素はリストに変換され、変数 my_result に代入されます。
最後に、その結果がコンソールに出力されます。
補足:ジェネレータを使うメリット
この実装では yield を使ったジェネレータ関数を採用しています。ジェネレータは要素を一度にすべてメモリ上に展開するのではなく、必要なタイミングで1つずつ値を生成するため、大量のデータを扱う場合でもメモリ効率に優れているのが特徴です。また、Kの値を変更するだけで「2個ずつ」「3個ずつ」といった異なるパターンの交互結合にも柔軟に対応できます。
-
Pythonでパターンを出力する方法|三角形・数字・アルファベット・ピラミッドのコード例
Pythonでパターンを出力するには、ネストされた(入れ子構造の)forループを使用します。外側のループで行数を制御し、内側のループで列数を処理します。そしてprint文を工夫することで、目的に応じたさまざまなパターンを作成できます。パターンには、星(アスタリスク)パターン、数字パターン、アルファベットパターンなどがあり、三角形やピラミッドなど、さまざまな形状にも対応できます。パターン出力の基本これらのパターンは、print文を少し変更しながらforループを組み合わせることで出力できます。基本的な考え方はどのパターンも共通しており、違いはごくわずかです。ここからは、代表的なパターンのコードを実
-
Pythonのjoin()関数とは?リストや辞書を連結する使い方を徹底解説
本記事では、Python 3.x(およびそれ以前のバージョン)における join() 関数の実装方法と使い方について詳しく解説します。 まず、最も一般的な使用例として、リスト(イテラブル)に対する join() の活用方法を見ていきましょう。ここでは、区切り文字(デリミタ)を使ってリストの要素を連結します。区切り文字には任意の文字を指定できるほか、空文字列を指定することも可能です。 例1:区切り文字「->」でリストを連結する # イテラブル(リスト)を定義 list_1 = [t,u,t,o,r,i,a,l] s = -> # 区切り文字を指定 # リストの要素を ->