新規ドキュメント


忘れていく脳のための備忘録
by w_l_s
プロフィールを見る
画像一覧

人の記事にけちをつけてみる

メモ帳のところにリンクを張ってあるbokujuの日記さん。
そこで気になる日記を見つけた。

pythonでの文字の連結は、文字列よりリストを使おう!

なるほど、結果を見ると早い。
ただ、ひとつ気になることが。。。

リストにくっつけるだけじゃ連結してないんじゃないか?

気になったので調べてみたら、join関数でくっつけられるらしい。
>>> s = "こんばんわ" + "ひとふくろうです"
>>> print s
こんばんわひとふくろうです

リストだとこうなる。
>>> ls = ["こんばんわ"]
>>> ls.append("ひとふくろうです")
>>> print "".join(ls)
こんばんわひとふくろうです

おお、これで早い文字列連結が可能だ!

...ここでやめときゃよかったんだ。
なんで"じゃあ、リストの要素にリストやタプルがあったらどうなるんだろう"なんて考えるんだ。

結果は、例外が発生して終了する。
さらに、str型とunicode型が混在すると、今度はUnicodeDecodeErrorが発生。これは+を使った連結でも起きる。

どんな状況でも連結させたい。
リストの要素にリストやタプルがあっても一直線に連結させたい。
...需要があるかどうかは知らないけど。

そんなわけで、リストの中身を文字列にして返す関数を書いてみた。

##########################################################
def ListToStr(obj, encoding = 'utf-8'):
target = []
for item in obj:
if isinstance(item, unicode):
item.encode(encoding)
elif not isinstance(item, str):
if isinstance(item, int) or isinstance(item, float):
item = str(item)
else:
item = ListToStr(item)

target.append(item)

s = ''.join(target)
return s

##########################################################

要素にリストがあるとこけるなら、リストがなくなるまで要素をばらしてしまえばいい。
乱暴だけど、再帰で書けるので少し楽かも。

数値があってもstr型に変換するので連結できる。
虚数?そんなの知らんわ。
…虚数を入れると例外が起きます。
辞書を要素に入っていると、キーだけを連結します。
正直使いづらいです。

早さはどうなんだろ…。
いまさらだけど、文字列の連結にリスト使おうとする人が、要素にリスト突っ込んだりするもんなんだろうか…。
なんか午前中を無駄にした気になってきたぞ。
[PR]
by w_l_s | 2008-12-21 20:16 | Python

カテゴリ

全体
erlang
Python
c言語
作って遊ぼう
シェルスクリプト
OS
javascript
jQuery
反省
vim
未分類

お気に入りブログ

メモ帳

最新のトラックバック

ライフログ

検索

タグ

ファン

記事ランキング

ブログジャンル

画像一覧