2013-05-13 89 views
6

我有一個像​​ 這樣的列表我想要一個像'abc'的字符串。所以實際上結果是l[0]+l[1]+l[2],也可被軟件寫爲連接列表元素

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

是否有什麼辦法可以更優雅做到這一點?

回答

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()只需創建一個新的字符串對象。

請注意,str.join()將環回輸入序列兩次。一次計算輸出字符串需要多大,並再次構建它。作爲副作用,這意味着,使用列表中理解,而不是生成器表達式的是更快:

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 25S相當困難的匹配偏移...... – 2013-05-13 12:44:31

+3

忍者再次撞擊。 – 2013-05-13 12:44:52

+0

一個很好的鏈接:http://stackoverflow.com/questions/3055477/how-slow-is-pythons-string-concatenation-vs-str-join我喜歡這個答案是如此詳細的一個真正的基本問題 – jamylak 2013-05-13 12:45:51