Pythonでリストをカスタムの重複ありネストリスト(入れ子リスト)に変換する方法
Pythonでリストを、要素が重なり合うカスタムサイズのネストリスト(入れ子リスト)に変換したい場合があります。たとえば、元のリストを一定間隔で区切りつつ、隣接する部分リスト同士で一部の要素を共有させたいケースです。このような変換は、range関数による反復処理と、リストのappendメソッドおよびスライス操作を組み合わせることで簡単に実現できます。
サンプルコード
以下に具体的な実装例を示します。
my_list = [31, 25, 36, 76, 73, 89, 91, 100]
print("The list is :")
print(my_list)
my_step, my_size = 3, 4
my_result = []
for index in range(0, len(my_list), my_step):
my_result.append(my_list[index: index + my_size])
print("The result is :")
print(my_result)実行結果
The list is : [31, 25, 36, 76, 73, 89, 91, 100] The result is : [[31, 25, 36, 76], [76, 73, 89, 91], [91, 100]]
コードの解説
まず、元となる整数のリストを定義し、コンソールに表示します。
次に、2つの整数を定義しています。
my_step(3)は各部分リストの開始位置の間隔、my_size(4)は1つの部分リストに含める最大要素数です。変換結果を格納するための空のリストを用意します。
range(0, len(my_list), my_step)によって、リストの先頭からmy_stepごとにインデックスを取得し、その位置からmy_size分の要素をスライスで切り出して、空のリストにappendメソッドで追加していきます。このとき開始位置が3ずつずれる一方、切り出す幅は4であるため、隣接する部分リスト間で1つの要素(この例では76や91)が重複して含まれます。
最終的に完成したネストリストが結果となり、コンソールに出力されます。
ポイントまとめ
stepとsizeの値を変更すれば、重複の度合いや部分リストの長さを自由に調整できます。リストの末尾付近では要素数が
sizeに満たない場合でも、Pythonのスライスは自動的に範囲内の要素のみを返すため、エラーが発生することなく安全に処理できます。
-
Pythonでネストしたリスト内包表記をマスター!行列作成からフラット化まで
ネストされたリスト(入れ子リスト)とは、リストの中にさらにリストが含まれている構造のことです。Pythonにはこうしたネスト構造をスマートに扱うための仕組みが備わっており、リスト内包表記を使えば、簡潔で読みやすいコードでさまざまな操作を行えます。本記事では、リスト内包表記を活用してネストされたリストを作成・操作する方法を、具体例とともに解説します。行列(マトリックス)の作成行列を作成するには、行と列の組み合わせを定義する必要があります。forループを含むリスト内包表記を、別のforループ付きリスト内包表記の中に入れ子にすることで、3行×4列の行列を簡単に生成できます。matrix = [[m
-
Pythonでリストを出力する方法|インデックスの基本から実践的な出力テクニックまで
Pythonのリストとは? Pythonのリスト(list)は、複数の要素をひとつにまとめて管理できるデータ型です。リスト内の各要素は順序を持って格納されており、それぞれの位置(インデックス)を指定することで、任意の要素にアクセスできます。 インデックスは0から始まる リストのインデックスは0から始まる点に注意が必要です。つまり、最初の要素が list[0]、2番目の要素が list[1]、3番目の要素が list[2] に対応します。 例えば、以下のようなリストを考えてみましょう。 numbers = [10, 20, 50, 40] print(numbers[2]) # 出力結果:5