2013-05-13 4 views
6

Mam listę taką jak l=['a', 'b', 'c'] Chcę ciąg podobny do "abc". Faktycznie więc wynik jest l[0]+l[1]+l[2], które mogą być również writte jakŁączenie elementów listy

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

Czy istnieje jakiś sposób, aby to zrobić bardziej elegancko?

Odpowiedz

15

Zastosowanie str.join():

s = ''.join(l) 

Łańcuch na którą nazywamy ten jest używany jako separator między strunami w 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' 

Korzystanie str.join() jest znacznie szybciej niż łącząc swoje elementy jeden po drugim, ponieważ musi utworzyć nowy obiekt ciągów dla każdej konkatenacji. str.join() ma tylko utworzyć nowy ciąg znaków jeden.

Należy pamiętać, że str.join() będzie pętlę nad sekwencją wejściową dwukrotnie pod numerem. Raz, aby obliczyć, jak duży powinien być ciąg wyjściowy, i jeszcze raz, aby go zbudować. Jako efekt uboczny, co oznacza, że ​​na podstawie listy ze zrozumieniem zamiast wyrażenia generatora jest szybsze:

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 offset 25s dość trudno dopasować ...... –

+3

Ninja uderza ponownie . –

+0

Dobry link: http://stackoverflow.com/questions/3055477/how-slow-is-pythons-string-concatenation-vs-str-join Podoba mi się, jak ta odpowiedź jest tak szczegółowa dla naprawdę podstawowego pytania – jamylak