Pythonで文字列のリストをリストのリスト(ネストしたリスト)に変換する方法
この記事では、文字列型のデータを含むリストから、リストのリスト(入れ子構造のリスト)を作成する方法を解説します。元のリストには、リスト形式の文字列が要素として格納されており、それらを個々の要素に分解して、真のリスト構造へと変換していきます。
strip()とsplit()を使う方法
まず紹介するのは、strip()とsplit()の2つのメソッドを組み合わせる方法です。strip()で各文字列から不要な角括弧「[ ]」を取り除き、その後split()を使ってカンマ区切りで要素を分割することで、リストのリストを生成できます。
コード例
list1 = [ '[0, 1, 2, 3]','["Mon", "Tue", "Wed", "Thu"]' ]
print ("The given list is : \n" + str(list1))
print("\n")
# strip() + split() を使用
result = [k.strip("[]").split(", ") for k in list1]
print ("Converting list of string to list of list : \n" + str(result))実行結果
上記のコードを実行すると、次のような出力が得られます。
The given list is : ['[0, 1, 2, 3]', '["Mon", "Tue", "Wed", "Thu"]'] Converting list of string to list of list : [['0', '1', '2', '3'], ['"Mon"', '"Tue"', '"Wed"', '"Thu"']]
split()とスライスを使う方法
次に、split()メソッドと文字列スライシングだけを使って同じ結果を得る方法を紹介します。スライス操作によって各文字列の先頭と末尾の角括弧を除去し、その後にsplit()で要素を分割します。リスト内包表記と組み合わせることで、簡潔に処理を記述できるのが特徴です。
コード例
list1 = [ '[0, 1, 2, 3]','["Mon", "Tue", "Wed", "Thu"]' ]
print ("The given list is : \n" + str(list1))
print("\n")
# split() とスライスを使用
result = [i[1 : -1].split(', ') for i in list1]
print ("Converting list of string to list of list : \n" + str(result))実行結果
こちらのコードを実行しても、先ほどと同じ結果が得られます。
The given list is : ['[0, 1, 2, 3]', '["Mon", "Tue", "Wed", "Thu"]'] Converting list of string to list of list : [['0', '1', '2', '3'], ['"Mon"', '"Tue"', '"Wed"', '"Thu"']]
まとめ
どちらの方法でも、文字列として表現されたリストを実際のリスト構造へ変換できます。strip()を使う方法は角括弧を明示的に指定して除去するため意図が分かりやすく、一方スライスを使う方法はコードがシンプルになるという利点があります。用途や可読性の要件に応じて使い分けるとよいでしょう。なお、より厳密な解析が必要な場合は、ast.literal_eval()を使うことで数値型や文字列型を正しく評価しながら変換することも可能です。
-
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のリテラル構造のみ