【Python】文字列のリストをリストのリスト(ネストしたリスト)に変換する方法
Pythonでは、文字列として格納された複数のリストを、実際の「リストのリスト」(ネストしたリスト構造)へ変換したい場面があります。例えば、['[0, 1, 2, 3]', '["Mon", "Tue", "Wed", "Thu"]'] のような文字列のリストを、各要素が個別のリストになる形に整形するケースです。
この記事では、文字列のリストをリストのリストへ変換する代表的な2つの方法を、サンプルコードと実行結果とともにわかりやすく解説します。
方法1:strip()とsplit()を組み合わせる
strip()メソッドで文字列の前後にある角括弧 [] を取り除き、その後 split()メソッドでカンマ区切りに分割します。これにより、各文字列を個々の要素を持つリストへ変換できます。
サンプルコード
list1 = [ '[0, 1, 2, 3]','["Mon", "Tue", "Wed", "Thu"]' ]
print ("元のリスト : \n" + str(list1))
print("\n")
# strip() + split() を使用
result = [k.strip("[]").split(", ") for k in list1]
print ("文字列のリストからリストのリストへの変換結果 : \n" + str(result))実行結果
元のリスト : ['[0, 1, 2, 3]', '["Mon", "Tue", "Wed", "Thu"]'] 文字列のリストからリストのリストへの変換結果 : [['0', '1', '2', '3'], ['"Mon"', '"Tue"', '"Wed"', '"Thu"']]
内包表記を使うことで、リストの各要素に対して一括して処理を適用でき、コードも簡潔になります。
方法2:スライスとsplit()を組み合わせる
この方法では、文字列のスライス機能を利用して先頭と末尾の角括弧を除去し、その後に split()で分割します。[1:-1]というスライス指定により、最初と最後の1文字ずつを除外できるのがポイントです。forループと組み合わせて各文字列に処理を適用します。
サンプルコード
list1 = [ '[0, 1, 2, 3]','["Mon", "Tue", "Wed", "Thu"]' ]
print ("元のリスト : \n" + str(list1))
print("\n")
# split() を使用
result = [i[1 : -1].split(', ') for i in list1]
print ("文字列のリストからリストのリストへの変換結果 : \n" + str(result))実行結果
元のリスト : ['[0, 1, 2, 3]', '["Mon", "Tue", "Wed", "Thu"]'] 文字列のリストからリストのリストへの変換結果 : [['0', '1', '2', '3'], ['"Mon"', '"Tue"', '"Wed"', '"Thu"']]
補足:より安全な変換にはast.literal_eval()も有効
上記の2つの方法はシンプルですが、文字列の形式が崩れていると意図通りに動作しない場合があります。より堅牢に処理したい場合は、標準ライブラリの ast.literal_eval() を使うと、文字列を安全にPythonオブジェクトとして評価できます。
import ast list1 = [ '[0, 1, 2, 3]','["Mon", "Tue", "Wed", "Thu"]' ] result = [ast.literal_eval(k) for k in list1] print(result) # [[0, 1, 2, 3], ['Mon', 'Tue', 'Wed', 'Thu']]
この方法なら、数値は数値型として、文字列は文字列型として正しく復元されるため、データの型を保持したい場合に特に便利です。
まとめ
- strip() + split():角括弧を除去してカンマで分割するシンプルな方法
- スライス + split():
[1:-1]で両端を除外して分割する方法 - ast.literal_eval():文字列を安全にPythonオブジェクトへ変換する堅牢な方法
用途やデータの形式に応じて、これらの方法を使い分けることで、文字列データを柔軟にリスト構造へ変換できます。
-
Pythonで文字列を単語のリストに変換する方法
文字列を単語のリストに変換したい場合は、空白文字を基準に文字列を分割するだけで実現できます。最もシンプルな方法は、文字列クラスが標準で提供している split() メソッドを使うことです。このメソッドのデフォルトの区切り文字は空白であり、文字列に対して呼び出すと、空白文字の位置で自動的に分割してくれます。split()メソッドを使う方法引数を指定せずに split() を呼び出すだけで、連続する空白もまとめて処理され、単語ごとのリストが返されます。コード例>>> Please split this string.split() [Please, split, this, st
-
Pythonでリストの文字列表現をリストに変換する方法【ast.literal_evalの使い方】
Pythonでは、[apple, orange, banana] のように文字列として表現されたリストを、実際のリストオブジェクトへ変換したい場面があります。そんなときに便利なのが、標準ライブラリの ast.literal_eval() です。 ast.literal_eval()とは ast.literal_eval() は、文字列をPythonの式として安全に評価するための関数です。任意のコードを実行してしまう危険性がある eval() と異なり、評価できるのは文字列・数値・タプル・リスト・辞書・ブール値(True / False)、そして None といったPythonのリテラル構造のみ