2013-05-13 17 views
6

リストがあります​​ 「abc」のような文字列が必要です。だから、実際には結果もリストの要素を連結する

s = '' 
for i in l: 
    s += i 

ようで書かできl[0]+l[1]+l[2]、あるよりエレガントにこれを実行する方法はありますか?

答えて

15

使用str.join()

s = ''.join(l) 

あなたはこれがl内の文字列間の区切り文字として使用されている呼び出しれている文字列:

>>> l=['a', 'b', 'c'] 
>>> ''.join(l) 
'abc' 
>>> '-'.join(l) 
'a-b-c' 
>>> ' - spam ham and eggs - '.join(l) 
'a - spam ham and eggs - b - spam ham and eggs - c' 

str.join()を使用すると、あなたの要素を連結するよりはるかに高速ですこれは連結ごとに新しい文字列オブジェクトを作成する必要があるためです。 str.join()は、の新しい文字列オブジェクトを作成する必要があります。

は、入力シーケンスを2回にループすることに注意してください。出力文字列の大きさを計算し、もう一度構築する必要があります。マッチするかなり難しい25Sのオフセット

slower_gen_expr = ' - '.join('{}: {}'.format(key, value) for key, value in some_dict) 
faster_list_comp = ' - '.join(['{}: {}'.format(key, value) for key, value in some_dict]) 
+2

+1 Q/Aが...... –

+3

忍者は再びストライキ:副作用として、それはジェネレータ式の代わりに、リストの内包表記を使用して高速であることを意味し。 –

+0

良いリンク:http://stackoverflow.com/questions/3055477/how-slow-is-pythons-string-concatenation-vs-str-join私はこの答えが本当に基本的な質問のためにとても詳細なのが好きです – jamylak

関連する問題