TypeError: sequence item 0: expected string, int found

By | 2012/4/5 木曜日

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

こちらもエラーにならない。

思想の違いなんだろうな。

3 thoughts on “TypeError: sequence item 0: expected string, int found

  1. syou007

    確かにこれは引っかかる・・・。
    LLならもう少し緩くして欲しいですな。。。

    ちなみにjoinの挙動を変える事は出来ないんですか?

  2. shirebito

    mapを使うとかどうでしょうか?

    arr = [1, 2, 3, 4, 5]
    print ‘/’.join(map(str, arr))

  3. t

    > syou007
    緩いのもありなんだけど、こんなもんじゃないかな。
    joinの挙動を上書きするのは面白そうだね。今度試してみます。

    > shirebito
    map関数の第一引数にstrですか、思いつかなかったです。
    シンプルでいいですね。次回からこれで行こう。
    ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。