2013-05-13 4 views
6

У меня есть список l=['a', 'b', 'c'] Я хочу, чтобы строка называлась «abc». Так ведь результат l[0]+l[1]+l[2], который также может быть writte вОбъединить элементы списка

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() будет циклически перебирать последовательность ввода дважды. Однажды, чтобы рассчитать, насколько большой должна быть строка вывода, и еще раз, чтобы ее построить. В качестве побочного эффекта, что означает, что с помощью списка понимание вместо выражения генератора быстрее: смещение 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

Смежные вопросы