Pythonで文字列化されたリストをリスト型に変換する3つの方法
Pythonはさまざまなデータ型を扱えるため、開発中に「リストが文字列として表現されている」場面に遭遇することがあります。例えば、APIのレスポンスやファイルから読み込んだデータが、"[Mon, 2, Tue, 5]" のような文字列になっているケースです。この記事では、そのような文字列を実際のリストに変換する3つの方法を、サンプルコードとともにわかりやすく解説します。
1. strip() と split() を組み合わせる方法
まず strip() メソッドを使って文字列の前後にある角括弧 [ ] を取り除き、その後に split() 関数を適用します。split() の引数にカンマを指定することで、文字列を要素ごとに分割してリストを作成できます。
サンプルコード
stringA = "[Mon, 2, Tue, 5]"
# 対象の文字列
print("元の文字列:", stringA)
print(type(stringA))
# 文字列をリストへ変換
res = stringA.strip('][').split(', ')
# 結果とその型を表示
print("変換後のリスト:", res)
print(type(res))
実行結果
上記のコードを実行すると、次のような出力が得られます。
元の文字列: [Mon, 2, Tue, 5] 変換後のリスト: ['Mon', '2', 'Tue', '5,']
注意点: この方法では、すべての要素が文字列としてリストに格納されます。数値として扱いたい場合は、後述の json.loads() や ast.literal_eval() の利用を検討してください。また、末尾にカンマが残っている場合など、元の文字列の書式によっては意図しない結果になることもあるため、入力データの形式には注意が必要です。
2. json.loads() を使う方法
json モジュールを使うと、文字列からリストへの直接変換が可能です。文字列を引数として json.loads() に渡すだけで変換できます。ただし、JSONの仕様上、文字列は二重引用符で囲む必要があるため、この方法で正しく変換できるのは数値要素のみのリストです。
サンプルコード
import json
stringA = "[21,42, 15]"
# 対象の文字列
print("元の文字列:", stringA)
print(type(stringA))
# 文字列をリストへ変換
res = json.loads(stringA)
# 結果とその型を表示
print("変換後のリスト:", res)
print(type(res))
実行結果
元の文字列: [21,42, 15] 変換後のリスト: [21, 42, 15]
この方法の利点は、各要素が整数としてリストに格納される点です。文字列ではなく数値として処理したい場合に特に有効です。
3. ast.literal_eval() を使う方法
ast モジュールが提供する literal_eval() 関数も、文字列を直接リストに変換できます。文字列を引数として渡すだけで動作し、こちらも数値要素のみのリストを対象とできます。
サンプルコード
import ast
stringA = "[21,42, 15]"
# 対象の文字列
print("元の文字列:", stringA)
print(type(stringA))
# 文字列をリストへ変換
res = ast.literal_eval(stringA)
# 結果とその型を表示
print("変換後のリスト:", res)
print(type(res))
実行結果
元の文字列: [21,42, 15] 変換後のリスト: [21, 42, 15]
セキュリティ上の注意: ast.literal_eval() は任意のコードを実行しないため eval() より安全ですが、信頼できない入力に対して使う場合は依然として慎重さが必要です。可能な限り json.loads() を優先するのが良いでしょう。
まとめ
| 方法 | 特徴 | 向いているケース |
|---|---|---|
| strip() + split() | すべての要素が文字列になる | 書式が単純なテキストデータ |
| json.loads() | 数値・真偽値などを正しい型で復元 | JSON形式の文字列 |
| ast.literal_eval() | Pythonリテラルを安全に評価 | Python形式のリスト文字列 |
文字列化されたリストを変換する際は、データの形式と求める要素の型に応じて、これら3つの方法を使い分けると効率的です。
-
【Python入門】文字のリストを文字列に変換する方法
Pythonのjoin()メソッドとは Pythonには、リストやタプルなどのシーケンスオブジェクトの要素を連結して1つの文字列を返す、組み込みのjoin()メソッドが用意されています。join()は、呼び出し元の文字列を「区切り文字」として要素間に挿入しながら連結を行います。そのため、区切り文字なしで単純に連結したい場合は、空文字列()に対してjoin()を呼び出します。 基本的な使い方:区切り文字なしで連結する 以下の例では、文字のリスト [h, e, l, l, o] を空文字列で連結し、「hello」という1つの文字列に変換しています。 >>> lst=[h,e,l
-
Pythonでリストの文字列表現をリストに変換する方法【ast.literal_evalの使い方】
Pythonでは、[apple, orange, banana] のように文字列として表現されたリストを、実際のリストオブジェクトへ変換したい場面があります。そんなときに便利なのが、標準ライブラリの ast.literal_eval() です。 ast.literal_eval()とは ast.literal_eval() は、文字列をPythonの式として安全に評価するための関数です。任意のコードを実行してしまう危険性がある eval() と異なり、評価できるのは文字列・数値・タプル・リスト・辞書・ブール値(True / False)、そして None といったPythonのリテラル構造のみ