Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで文字列形式のリストをlist型に変換する3つの方法(eval / ast / json)

データ処理を行っていると、受け取ったデータが文字列として格納されているものの、その中身の構造は実はPythonのリストになっているというケースに遭遇することがあります。本記事では、こうした文字列形式のリストを、そのままデータ操作に利用できる本物のPythonのリスト(list型)へ変換する方法を、3つのアプローチから解説します。

方法1:eval関数を使う

eval関数は、引数として渡された文字列をPythonの式として評価し、その結果を返します。そのため、文字列形式のリストをそのままevalに渡すだけで、Pythonのリストを取得できます。

サンプルコード

stringA = "['Mon', 2,'Tue', 4, 'Wed',3]"
# 対象の文字列
print("Given string : \n",stringA)
# 型の確認
print(type(stringA))
# evalを使用して変換
res = eval(stringA)
# 変換結果の表示
print("The converted list : \n",res)
# 型の確認
print(type(res))

実行結果

Given string :
['Mon', 2,'Tue', 4, 'Wed',3]
<class 'str'>
The converted list :
['Mon', 2, 'Tue', 4, 'Wed', 3]
<class 'list'>

注意: evalは任意のPythonコードを実行できてしまうため、外部からの信頼できない入力に対して使用すると重大なセキュリティリスクにつながります。実運用では次に紹介するast.literal_evalの使用を推奨します。

方法2:ast.literal_evalを使う

標準ライブラリのastモジュールが提供するliteral_eval関数に文字列を渡すことでも、同様にPythonのリストへ変換できます。literal_evalはリテラル(文字列・数値・タプル・リスト・辞書などの定数表現)のみを評価するため、evalよりも安全であり、外部入力の処理に適しています。

サンプルコード

import ast
stringA = "['Mon', 2,'Tue', 4, 'Wed',3]"
# 対象の文字列
print("Given string : \n",stringA)
# 型の確認
print(type(stringA))
# literal_evalを使用して変換
res = ast.literal_eval(stringA)
# 変換結果の表示
print("The converted list : \n",res)
# 型の確認
print(type(res))

実行結果

Given string :
['Mon', 2,'Tue', 4, 'Wed',3]
<class 'str'>
The converted list :
['Mon', 2, 'Tue', 4, 'Wed', 3]
<class 'list'>

方法3:json.loadsを使う

jsonモジュールのloads関数を使っても、同じように文字列を評価してPythonのリストを生成できます。ただし、JSONの仕様上、文字列要素は必ずダブルクォート(")で囲む必要がある点に注意してください。シングルクォートのままだエラーが発生します。

サンプルコード

import json
stringA = '["Mon", 2,"Tue", 4, "Wed",3]'
# 対象の文字列
print("Given string : \n",stringA)
# 型の確認
print(type(stringA))
# loadsを使用して変換
res = json.loads(stringA)
# 変換結果の表示
print("The converted list : \n",res)
# 型の確認
print(type(res))

実行結果

Given string :
["Mon", 2,"Tue", 4, "Wed",3]
<class 'str'>
The converted list :
['Mon', 2, 'Tue', 4, 'Wed', 3]
<class 'list'>

まとめ

  • eval: 手軽だが任意のコードが実行されるため、信頼できる入力限定で使用する。
  • ast.literal_eval: リテラルのみを安全に評価できるため、外部入力の変換に最適。
  • json.loads: JSON形式(ダブルクォート必須)の文字列を扱う場合に有効。

用途やデータの出自に応じて、これらの方法を使い分けることで、文字列形式のリストを安全かつ効率的にPythonのリストへ変換できます。

  1. Pythonで文字列を単語のリストに変換する方法

    文字列を単語のリストに変換したい場合は、空白文字を基準に文字列を分割するだけで実現できます。最もシンプルな方法は、文字列クラスが標準で提供している split() メソッドを使うことです。このメソッドのデフォルトの区切り文字は空白であり、文字列に対して呼び出すと、空白文字の位置で自動的に分割してくれます。split()メソッドを使う方法引数を指定せずに split() を呼び出すだけで、連続する空白もまとめて処理され、単語ごとのリストが返されます。コード例>>> Please split this string.split() [Please, split, this, st

  2. Pythonでリストの文字列表現をリストに変換する方法【ast.literal_evalの使い方】

    Pythonでは、[apple, orange, banana] のように文字列として表現されたリストを、実際のリストオブジェクトへ変換したい場面があります。そんなときに便利なのが、標準ライブラリの ast.literal_eval() です。 ast.literal_eval()とは ast.literal_eval() は、文字列をPythonの式として安全に評価するための関数です。任意のコードを実行してしまう危険性がある eval() と異なり、評価できるのは文字列・数値・タプル・リスト・辞書・ブール値(True / False)、そして None といったPythonのリテラル構造のみ