Pythonで文字列をリストに変換する方法3つ

スポンサーリンク

Pythonで、他のAPIをいろいろと呼び出すようなコードベースを扱う必要がある場合、リストのような形式の文字列を受け取ることがありますが、それでも明示的にリストとは言えない場合があります。

このような場合、文字列をリストに変換したいと思うかもしれません。

今回は、Pythonで同じことを実現する方法をいくつか見ていきます。

スポンサーリンク

リスト型文字列の変換

リスト型文字列は、リストと同様に開閉括弧を持ち、リストの要素をカンマで区切った文字列とすることができます。

リストとの違いは開閉引用符だけで、これは文字列であることを意味します。

例えば、以下の様になります。

str_inp = '["Hello", "from", "Python"]'

このような文字列をどのようにリストに変換するか見てみましょう。

方法1: ast モジュールを使用する

Pythonの ast (Abstract Syntax Tree) モジュールは、このような文字列を扱うための便利なツールで、与えられた文字列の内容を適宜に処理することができます。

この場合、ast.literal_eval() を使ってリテラルを評価し、リストに変換することができます。

import ast
 
str_inp = '["Hello", "from", "Python"]'
print(str_inp)
op = ast.literal_eval(str_inp)
print(op)

結果は以下の通りです。

'["Hello", "from", "Python"]'
['Hello', 'from', 'Python']

方法2: json モジュールを使う

Pythonのjsonモジュールは、文字列を操作するためのメソッドも提供しています。

特に、json.loads() メソッドはJSON型の文字列をデコードしてリストを返すので、これを適宜利用することができます。

import json
 
str_inp = '["Hello", "from", "Python"]'
print(str_inp)
op = json.loads(str_inp)
print(op)

出力は前と同じです。

方法3:str.replace()とstr.split()を使用します。

Pythonに内蔵されている str.replace() メソッドを使い、入力文字列を手動で反復処理することができます。

str.split(“,”)`を使って新しくできたリストに要素を追加しながら、開閉括弧を取り除き、リスト型文字列を手動でパースすることができます。

str_inp = '["Hello", "from", "Python"]'
str1 = str_inp.replace(']','').replace('[','')
op = str1.replace('"','').split(",")
print(op)

結果は以下の通りです。

['Hello', ' from', ' Python']

カンマ区切りの文字列を変換する

カンマ区切り文字列とは、一連の文字をカンマで区切り、Pythonの文字列クォーテーションで囲んだ文字列です。

例えば、以下の様になります。

str_inp = "Hello,from,Python'

このようなタイプの文字列を要素のリストに変換するためには、いくつかの他の方法があります。

方法1:str.split(‘,’)を使う

str.split(‘,’)`を使ってカンマを区切ることで、直接リストに変換することができます。

str_inp = "Hello,from,Python"
op = str_inp.split(",")
print(op)

結果を出力すると、以下の様になります。

['Hello', 'from', 'Python']

方法2: eval() を使う

入力文字列が信頼できるものであれば、対話型シェルを立ち上げて eval() を使って文字列を直接評価することができます。

しかし、これは推奨されません。

潜在的に信頼されていないコードを実行することによるセキュリティ上の危険性があるため、むしろ避けるべきです。

それでも、もしこれを使いたいのであれば、どうぞ。

str_inp = "potentially,untrusted,code"
 
# Convert to a quoted string so that
# we can use eval() to convert it into
# a normal string
str_inp = "'" + str_inp + "'"
str_eval = ''
 
# Enclose every comma within single quotes
# so that eval() can separate them
for i in str_inp:
    if i == ',':
        i = "','"
    str_eval += i
 
op = eval('[' + str_eval + ']')
print(op)

文字列が評価され、括弧が挿入されて op がリストであることを示すようになったので、出力はリストになります。

結果は以下の通りです。

['potentially', 'untrusted', 'code']

これはかなり長いので、カンマで区切られた文字列を解析するのにはお勧めできません。

この場合、 str.split(',') を使用するのが当然です。

まとめ

この記事では、リストを文字列に変換する方法をいくつか学びました。

リスト型文字列とカンマ区切り文字列を扱い、それらをPythonのリストに変換しました。

タイトルとURLをコピーしました