Pythonで文字列のリストをタプルのリストに変換する方法
Pythonでデータを操作していると、数値が文字列として格納されたリストに出会うことがあります。例えば「'21, 3'」のような文字列を、(21, 3) のようなタプルへ変換したいケースです。本記事では、カンマ区切りの数値形式で与えられた文字列のリストを、タプルのリストへ変換する2つの方法を解説します。
map関数とevalを使う方法
map関数を使って、リストの各要素にevalを適用する方法です。evalは文字列をPythonの式として評価するため、「21, 3」という文字列が自動的にタプル (21, 3) として解釈されます。最後にlist関数で結果をリストとして格納します。
サンプルコード
listA = ['21, 3', '13, 4', '15, 7']
# 与えられたリスト
print("Given list : \n", listA)
# evalを使用
res = list(map(eval, listA))
# 結果
print("List of tuples: \n", res)
実行結果
上記のコードを実行すると、以下の出力が得られます。
Given list : ['21, 3', '13, 4', '15, 7'] List of tuples: [(21, 3), (13, 4), (15, 7)]
注意: evalは任意のPythonコードを実行できるため、信頼できない入力に対して使うとセキュリティ上のリスクがあります。外部から取得したデータを扱う場合は、次に紹介するsplitを使った方法を推奨します。
map関数とsplitメソッドを使う方法
こちらの方法では、まずsplit関数を使ってカンマ区切りの文字列を個別の要素に分割します。続いてmapで各要素をint型に変換し、tuple関数によって要素をペアとしたタプルを作成します。リスト内包表記と組み合わせることで、全体を簡潔に1行で記述できます。
サンプルコード
listA = ['21, 3', '13, 4', '15, 7']
# 与えられたリスト
print("Given list : \n", listA)
# splitを使用
res = [tuple(map(int, sub.split(', '))) for sub in listA]
# 結果
print("List of tuples: \n", res)
実行結果
上記のコードを実行すると、以下の出力が得られます。
Given list : ['21, 3', '13, 4', '15, 7'] List of tuples: [(21, 3), (13, 4), (15, 7)]
まとめ
どちらの方法も同じ結果が得られますが、evalは任意のコードを実行できてしまうためセキュリティ面で不安が残ります。実務では、splitで分割した後にintへ変換するmapとの組み合わせの方が安全であり、意図も明確になるため推奨される手法です。
-
Pythonで文字列のリストをリストのリスト(ネストしたリスト)に変換する方法
この記事では、文字列型のデータを含むリストから、リストのリスト(入れ子構造のリスト)を作成する方法を解説します。元のリストには、リスト形式の文字列が要素として格納されており、それらを個々の要素に分解して、真のリスト構造へと変換していきます。strip()とsplit()を使う方法まず紹介するのは、strip()とsplit()の2つのメソッドを組み合わせる方法です。strip()で各文字列から不要な角括弧「[ ]」を取り除き、その後split()を使ってカンマ区切りで要素を分割することで、リストのリストを生成できます。コード例list1 = [ [0, 1, 2, 3],[Mon, Tue,
-
Pythonでタプルのリストを辞書に変換する方法を解説
Pythonでは、キーと値のペアを持つタプルのリストを、簡単に辞書(dict)へ変換できます。本記事では、setdefault()メソッドやdict()コンストラクタを使った変換方法を、具体例とともにわかりやすく解説します。 変換のイメージ まずは、どのような変換が行われるのかを見てみましょう。タプルのリストの各要素の第1引数が辞書の「キー」に、第2引数が「値」に対応します。 入力: [(Adwaita, 5), (Aadrika, 5), (Babai, 37), (Mona, 7), (Sanj, 25), (Sakya, 30)] 出力: {Adwaita: 5, Aadr