ここではPythonのリストと文字列の変換について、次の3つを解説します。
- リストを文字列に変換する方法
- 文字列をリストに変換する方法
- リストの数値要素を文字列に、文字列要素を数値に変換する方法
1. リストを文字列に変換|join()メソッド
リスト型のオブジェクトを文字列型のオブジェクトに変換するにはjoin()メソッドを使います。
join()メソッドは次のように書きます。
'区切り文字'.join(リスト)
クオテーション(’)の中に区切り文字を指定し、その後に「.join()」と繋げます。そしてメソッドの引数にリストを渡します。
区切り文字は、空白や記号を含む任意の文字を指定することができます。
1.1. 文字列のリストを文字列に変換
以下のコードでは、区切り文字を「・」にして、リストを文字列に変換しています。
colors = ['赤', '青', '黄']
'・'.join(colors) # 区切り文字を「・」にして文字列に変換
他の区切り文字も試してみましょう。
print('か'.join(colors)) # 区切り文字を「か」にして文字列に変換
print(' '.join(colors)) # 区切り文字を半角空白にして文字列に変換
1.2. 数値を含むリストを文字列に変換
join()メソッドでは、リストに含まれる数値を、そのまま文字列に変換しようとするとエラーになります。
もし数値を含むリストを文字列に変換したい場合は、リストの中の数値の要素を文字列に変換してからjoin()メソッドを使用します。そのために使うのがmap()関数です。
次のコードをご覧ください。
nums = [1, 2, 3]
', '.join(map(str, nums))
数値のリストも文字列に変換することができました。
補足:map()関数について
念のためmap()関数についても簡単に解説しておきます。map()関数は次のように書きます。
map(関数, イテラブル)
第一引数に渡した関数を、第二引数に渡したイテラブルの要素に対して使用します。
先ほどは、「map(str, nums)」と書いているので、リストnumsの全ての要素に対してstr()関数を使っていることになります。str()関数は引数に渡したオブジェクトを文字列型オブジェクトに変換するものです。これは「Pythonの数値と文字列を相互に変換する方法」で解説しています。
map()関数を実行すると以下のようにmap型オブジェクトを返します。
nums = [1, 2, 3]
mapped = map(str, nums)
print(mapped)
このmap型オブジェクトに関数やメソッドを実行すると、第一引数の関数を、第二引数で渡した要素に使用したデータを生成して、任意の処理を行うことができるのです。
「Pythonのjoinメソッドの使い方」でも解説しているので、ぜひ確認してみてください。
2. 文字列をリストに変換|split()メソッド
文字列型オブジェクトをリスト型オブジェクトに変換するにはsplit()メソッドを使います。
次のように書きます。
文字列.split('区切り文字', 分割回数)
リスト化したい文字列を書き、「.split(‘区切り文字’)」で繋げます。第二引数の分割回数はオプションです。
区切り文字を指定しないデフォルトの状態では、以下のコードのように、文字列を自動で、空白、改行\n、タブ\t、垂直タブ\v、復帰\r、改ページ\fで区切ってリスト化します。
str = '赤 青 黄'
str.split()
デフォルト以外の条件で区切りたい場合は、区切り文字を指定します。
str = '1と10と100'
nums = str.split('と')
print(nums)
「Pythonのsplitメソッドで文字列を分割する方法」では、より詳しく解説しています。
3. リストの要素を文字列や数値に変換
リストを文字列に変換するのではなく、リストの要素だけを文字列に変換したい場合はリスト内包表記を使った方法が楽です。
リスト内包表記については以下のページで確認することができます。
以下のコードでは、数値の要素を文字列に変換した新しいリストを作っています。
nums = [0, 1, -2, 300]
strs = [str(num) for num in nums]
print(strs)
文字列の要素を数値に変換する場合は、str()関数ではなくint()関数を使います。どちらの関数も「Pythonの数値と文字列を相互に変換する方法」で解説しています。
nums_a = [int(str) for str in strs]
print(nums_a)
コメント