Pythonで文字列をリストに結合する方法|ast.literal_evalとevalの使い方
はじめに
アプリケーション開発では、文字列を操作し、リストのようなミュータブル(変更可能)なデータ構造へ変換したい場面が数多くあります。本記事では、Pythonを使って複数の文字列を1つのリストに結合する方法を、具体的なコード例とともに解説します。
方法1:ast.literal_eval を使う方法
ast.literal_eval は、文字列として表現されたPythonのリテラル(リストやタプルなど)を安全に評価できる関数です。eval() とは異なり、任意のコードを実行しないため、セキュリティ面でも推奨される手法です。
# astライブラリのインポート
import ast
# 文字列の初期化
str1 = "'Python', 'for', 'fun'"
str2 = "'vishesh', 'ved'"
str3 = "'Programmer'"
# 結果用リストの初期化
result = []
# 1つのリストへ拡張
for x in (str1, str2, str3):
result.extend(ast.literal_eval(x))
# 出力
print(result)
# ['Python', 'for', 'fun', 'vishesh', 'ved', 'Programmer']このコードでは、タプル内の各文字列に対して ast.literal_eval を適用し、得られた要素を extend() で順次リストへ追加しています。その結果、すべての文字列が1つのリストに統合されます。
方法2:eval を使う方法
eval() 関数は、文字列をPythonの式として評価します。各文字列がリスト形式になっている場合、「+」演算子による連結式を動的に組み立てることで、まとめて1つのリストにできます。
# evalを使用する例
# 文字列の初期化(リスト形式)
str1 = "['python', 'for', 'fun']"
str2 = "['vishesh', 'ved']"
str3 = "['programmer']"
out = [str1, str2, str3]
out = eval('+'.join(out))
# 出力
print(out)
# ['python', 'for', 'fun', 'vishesh', 'ved', 'programmer']'+'.join(out) によって「リスト + リスト + リスト」という式の文字列が生成され、それを eval() が評価することで、すべての要素を含む単一のリストが得られます。
注意点
eval() は任意のPythonコードを実行できてしまうため、ユーザー入力など信頼できないデータに使用すると重大なセキュリティリスクとなります。外部入力を扱う場合は、必ず安全な ast.literal_eval を使用しましょう。また、組み込みの list を変数名として上書きしないよう注意してください。
まとめ
文字列をリストに変換・結合するには、ast.literal_eval を使う方法が安全性の観点からおすすめです。eval() は手軽ですがリスクを伴うため、用途に応じて適切な方法を選択することが重要です。
-
Pythonでリストを拡張する5つの方法を徹底解説
リストはPythonで最もよく使われるデータ構造です。既存のリストに新しい要素を追加して「拡張」したい場面は非常に多くありますが、その実現方法は1つだけではありません。本記事では、それぞれ特徴の異なる5つの手法を、実際のコード例と実行結果とともにわかりやすく解説します。1. +演算子を使う方法最も直感的なのが+演算子によるリストの連結です。変数に値を代入し直す感覚と同じように、新しいリストの要素を既存のリストに追加できます。サンプルコードlist = [Mon,Tue,Wed] list = list + [Thu,Fri] print(list)実行結果上記のコードを実行すると、次の出力が得
-
Pythonで文字列のリストを並べ替える方法:sort()とsorted()の使い分け
Pythonでは、文字列のリストを並べ替える方法が2つ用意されています。リスト自体を直接変更するsort()メソッドと、元のリストを保持したまま新しい並べ替え済みリストを作成するsorted()関数です。それぞれの特徴と使い方を解説します。 sort()メソッドでリストをその場で並べ替える sort()は、リストそのものを並べ替える「in-place(破壊的)」な操作です。元のリストの順序が直接変更されるため、戻り値を受け取る必要はありません。 >>> a = [Hello, My, Followers] >>> a.sort() >>>