Pythonを使っていると、文字列で構成されたリストを、要素を結合して文字列にしたい時があります。for文を使ってリストを回すことで要素を連結して文字列にすることもできますが、Pythonにはもっと簡単な方法があります。今回は、Pythonで文字列リストを文字列に変換する方法について解説します。
※文字列を指定した区切り文字で分割し、分割された要素からなるリストにするにはsplit()を使います。
joinを使ってリストを文字列に変換する
文字列リストを文字列に変換する場合、最初に思いつくのはfor文を使う方法です。もちろん、これでもうまくいきます。
str_list = ['python', 'list', 'exchange'] mojiretu = ' ' for x in str_list: mojiretu += x print(mojiretu)
実行結果
しかし、Pythonにはもっと簡単に文字列リストを文字列に変換する方法があります。それがjoin関数を使う方法です。join関数の構文は以下の通りです。
文字列 = ‘区切り文字’.join(リスト)
区切り文字とは、リストの要素を連結する際に各要素を区切る文字のことです。例えば区切り文字を「,(コンマ)」にすれば、リストの各要素をコンマで区切った一つの文字列となります。
str_list = ['python', 'list', 'exchange'] mojiretu = ','.join(str_list) print(mojiretu)
実行結果
区切り文字はfor文を使った方法でも入れようと思えば入れることができますので、実質for文を使ってもjoinを使っても結果は変わりません。しかし、joinなら連結処理が1行で終わるので、コードがスッキリします。
文字列リストを文字列にするときはjoinを使うとよいでしょう。
mapを使ってリストを文字列に変換する
便利なjoinですが、注意点があります。joinでリストを連結して文字列にできるのは、元のリストを構成する要素が「すべて文字列の場合」です。文字列以外、例えば数値などが含まれるとエラーになります。
str_list = ['python', 'list', 125] mojiretu = ','.join(str_list) print(mojiretu)
実行結果
TypeError: sequence item 2: expected str instance, int found
この例では、要素の3つ目が数値なのでエラーが出ています。Pythonは1つのリストにいろんな型を入れられるのでこういったエラーが多いです。
文字列以外の要素を含んだリストを文字列に変換するには、一度リストの中身をすべて文字列にしてからjoinを使う必要があります。ある要素を文字列に変換する関数として「str」がありますが、for文を使ってすべての要素にstrを適用してからjoinするのは面倒ですね。そんな時はmap関数を使いましょう。
map(関数, リスト)
mapを使うと、第一引数にある関数を、第二引数にあるリストのすべての要素に適用した結果を返してくれます。mapは他の関数と組み合わせることで様々なことができるのですが、リストを文字列に変換する場合はmapとstrを使うと楽にできます。そのあとにjoinを使うことで、文字列以外の要素が入ったリストを文字列に変換することが可能です。
str_list = ['python', 'list', 125] maped_list = map(str, str_list) #mapで要素すべてを文字列に mojiretu = ','.join(maped_list) print(mojiretu)
実行結果
splitで結合した文字列を元に戻す
ここまでjoinやmapを使って文字列リストを文字列に変換する方法を解説してきましたが、時には逆の操作をして文字列を文字列リストに戻したいときがあると思います。文字列の分割も、一応はfor文で実現させることができます。
mojiretu = 'python str split' str_list = [] temp = ' ' for x in mojiretu: if(x == ' '): str_list.append(temp) temp = ' ' else: temp += x if(temp != ' '): str_list.append(temp) print(str_list)
実行結果
無事、文字列が分割されて文字列リストになっています。しかし、毎回こんなに長いコードを打つのは大変ですね。ソースコードが見づらくなりますしバグも起こりそうです。文字列リストから文字列への変換にjoinが使えたように、関数一つで済ませてしまいたいものです。
そんな時はsplit関数を使います。split関数を使えば長くて見づらいfor文を使わなくても文字列を分割してリストに変換できます。split関数の構文は以下の通りです。
リスト = 文字列.split(‘区切り文字’)
splitは文字列を指定した区切り文字で区切り、それぞれを要素としたリストを返します。例えば、空白で文字列を区切りたい場合は区切り文字は空白のままでいいですし、「,(コンマ)」で区切りたいのであれば区切り文字に「,」を指定します。
mojiretu = 'python str split' str_list = mojiretu.split() print(str_list)
実行結果
おわりに
いかがでしたか。
リストの要素を指定した区切り文字で連結して文字列にするにはjoin()を使って効率的に実行できます。学習の参考にしてください。