11

l=['a', 'b', 'c'] 「abc」のような文字列が欲しいようなリストがあります。したがって、実際には結果はl[0]+l[1]+l[2]であり、次のように書くこともできます

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

これをよりエレガントに行う方法はありますか?

4

1 に答える 1

24

使用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()と、連結ごとに新しい文字列オブジェクトを作成する必要があるため、要素を 1 つずつ連結するよりもはるかに高速です。新しい文字列オブジェクトを1 つstr.join()作成するだけです。

str.join()入力シーケンスを 2 回ループすることに注意してください。出力文字列に必要な大きさを計算するために 1 回、それを構築するためにもう一度。副作用として、これは、ジェネレーター式の代わりにリスト内包表記を使用する方が高速であることを意味します。

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])
于 2013-05-13T12:43:38.497 に答える