kakts-log

programming について調べたことを整理していきます

python 文字列型のjoinメソッド

ある文字列が格納されているリストがあり、その要素をすべて並べて一つの文字列にしたい場合は文字列オブジェクトのメソッドであるjoinメソッドを使うといい

text = ['aaa','bbb','ccc']
str = ''.join(text)
print str ### "aaabbbccc"が表示される

ここで、上の場合だと 空文字オブジェクトに対するjoinが適用される
この場合のjoinメソッドは、text変数の各要素の間に空文字を割り込ませて1つの文字列にして返すものです。このjoinメソッドを応用して、もしただ文字を連結させるのでなく、カンマ区切りにしたい場合は
csvStr = ','.join(text) print csvStr ### aaa,bbb,cccと表示される
としてやればよい。

文字列連結の方法としては、他にも様々なアプローチがあるが、例えば


largeString = '' ###連結後の文字列を格納する変数の初期化
for piece in text: largeString += piece

とする方法もある。
しかしこの方法は先ほどのjoin()を使う方法よりも遅く、やるべきでない。

なぜなら、文字列のオブジェクトというものは、イミュータブル、つまり不変の物であり、for分を使った操作の場合、largeStringというオブジェクトに文字列を連結させるのでなく、for文で繰り返す回数だけ、あらたな文字列オブジェクトを生成しているためである。
この時、毎回既存のオブジェクトを変更していなく、処理の途中で無駄なオブジェクトが複数生成されてしまう。
n個の要素があるリストを上記のようにfor文で連結する時 処理途中で n-1個のオブジェクトの構築が行われ、それが即時に廃棄されることになり、その文実行スピードが遅くなってしまうのである。

なので文字列の連結を考える際、 ''.join(text) を使うのが現時点では最良ということです