Pythonで1次元リストを可変長の2次元リストに変換する方法
Pythonのリストは通常、要素が一列に並んだ1次元(1D)リストです。一方、2次元(2D)リストは、外側のリストの中にさらにリストがネストした構造を持ちます。本記事では、与えられた1次元リストから2次元リストを作成する方法を解説します。あわせて、2次元リスト内の各サブリストの長さ(要素数)をプログラム側で指定して渡す方法も紹介します。
appendとインデックスを使う方法
このアプローチでは、forループで2次元リストに必要な各長さを順番に処理し、その値をもとに元のリストをスライスして新しいリストへ追加していきます。インデックスは0から開始し、取り出した要素数を加算しながら増やすことで、元のリストを途切れなく分割できるのがポイントです。
サンプルコード
# 元のリスト
listA = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']
# 必要な2Dリストの長さ
len_2d = [2, 4]
# 空の新しいリストを宣言
res = []
def convert(listA, len_2d):
idx = 0
for var_len in len_2d:
res.append(listA[idx: idx + var_len])
idx += var_len
convert(listA, len_2d)
print("新しい2Dリスト:\n", res)
上記のコードを実行すると、次の結果が得られます。
出力結果
新しい2Dリスト: [['Sun', 'Mon'], ['Tue', 'Wed', 'Thu', 'Fri']]
このように、len_2dで指定した長さ[2, 4]に従って、元のリストが「先頭の2要素」と「続く4要素」の2つのサブリストに分割されました。
isliceを使う方法
islice関数を使うと、2次元リストに必要な要素数に応じて、元のリストを柔軟にスライスできます。ここでは、2次元リストとして必要な各長さの値を順に取り出し、その値を使って元のリストを切り分けていきます。isliceを使用するには、標準ライブラリのitertoolsパッケージが必要です。
サンプルコード
from itertools import islice
# 元のリスト
listA = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']
# 必要な2Dリストの長さ
len_2d = [3, 2]
# isliceを使用
def convert(listA, len_2d):
res = iter(listA)
return [list(islice(res, i)) for i in len_2d]
res = convert(listA, len_2d)
print("新しい2Dリスト:\n", res)
上記のコードを実行すると、次の結果が得られます。
出力結果
新しい2Dリスト: [['Sun', 'Mon', 'Tue'], ['Wed', 'Thu']]
iter()で元のリストからイテレータを作成しておくことで、isliceが前回読み取った位置の続きから要素を取得できる点が特徴です。そのため、複数回のislice呼び出しでも要素の重複や漏れが発生せず、可変長の2次元リストを簡潔に生成できます。
-
【Python入門】リストを文字列に変換する4つの方法を徹底解説
本記事では、Pythonでリスト(list)型のデータを文字列(string)型に変換する方法について、代表的な4つのアプローチをサンプルコードとともにわかりやすく解説します。 問題設定 与えられたリストを、ひとつながりの文字列に変換することを目標とします。例えば、複数の文字列要素を持つリストを結合して、単一の文字列として扱いたいケースなどが該当します。 ここでは、以下の4つの異なるアプローチを順番に見ていきましょう。 方法1: 空の文字列への連結(forループ) 最も基本的な方法は、空の文字列を用意し、forループでリストの各要素を順番に連結していくやり方です。処理の流れが直感的で、初心者
-
【初心者向け】Pythonの辞書(dict)をリストに変換する3つの方法
Pythonの辞書をリストに変換するには? Pythonの辞書(dict)クラスには、リストへの変換に便利なメソッドが3つ用意されています。それぞれitems()、keys()、values()で、以下のようなビューオブジェクトを返します。 items():キーと値のペア(タプル)で構成されるビューオブジェクト keys():キーのみで構成されるビューオブジェクト values():値のみで構成されるビューオブジェクト これらのビューオブジェクトは、組み込み関数 list() を使うことで、簡単にリストオブジェクトへ変換できます。 実際のコード例 以下は、辞書から各ビューオブジェクトを取