Pythonで配列に数値が入っている時にjoinするとエラーになるってお話。
Python触り始めて半年くらいになるけど、まだたまにやっちゃうので記事にすることにした。
これで忘れないだろう。
配列を/区切りの文字列に変換
arr = [1, 2, 3, 4, 5] print '/'.join(arr)
TypeError: sequence item 0: expected string, int found
中身が数値なのでエラーになる。
ちなみにPythonに馴染みがない人の為に言っておくがjoinは文字列のメソッドです。
1度数値を文字列に変換する
arr = [1, 2, 3, 4, 5] arr = [str(i) for i in arr] print '/'.join(arr)
1/2/3/4/5
これでok。もうちょっとシンプルなやり方はないのかな?知ってる人いたら教えて下さい。
ちなみにrubyでは
arr = [1, 2, 3, 4, 5] print arr.join('/')
1/2/3/4/5
エラーにはならない。
そしてPHP
$arr = array(1, 2, 3, 4, 5); print join('/', $arr);
1/2/3/4/5
こちらもエラーにならない。
思想の違いなんだろうな。
確かにこれは引っかかる・・・。
LLならもう少し緩くして欲しいですな。。。
ちなみにjoinの挙動を変える事は出来ないんですか?
mapを使うとかどうでしょうか?
arr = [1, 2, 3, 4, 5]
print ‘/’.join(map(str, arr))
> syou007
緩いのもありなんだけど、こんなもんじゃないかな。
joinの挙動を上書きするのは面白そうだね。今度試してみます。
> shirebito
map関数の第一引数にstrですか、思いつかなかったです。
シンプルでいいですね。次回からこれで行こう。
ありがとうございます。
uno