Czy istnieje prostszy sposób na połączenie elementów łańcucha na liście w pojedynczy łańcuch? Czy mogę korzystać z str.join()
funkcji?
Np. To jest wejście ['this','is','a','sentence']
i to jest pożądane wyjściethis-is-a-sentence
sentence = ['this','is','a','sentence']
sent_str = ""
for i in sentence:
sent_str += str(i) + "-"
sent_str = sent_str[:-1]
print sent_str
'-'.join(sentence)
Odpowiedzi:
Użyj
join
:źródło
sentence.join(" ")
że zadziała, ponieważ działa odwrotnielist.split(" ")
. Masz pomysł, czy zostanie to dodane do metod Pythona dla list?list.join
byłoby niewłaściwe dla dowolnej listy. Z drugiej strony argumentemstr.join
może być dowolna „ciągowa” sekwencja ciągów, a nie tylko lista. Jedyne, co miałoby sens, to wbudowana funkcjajoin(list, sep)
; jest jeden w (zasadniczo przestarzałym)string
module, jeśli naprawdę tego chcesz.' '.join(['this', 'is', 'a', 'sentence'])
Bardziej ogólny sposób konwersji list pythonowych na ciągi znaków to:
źródło
map(str, my_lst)
będzie wystarczająco bez wyliczanie listy =)int
ale może to być dowolny typ, który może być reprezentowany jako ciąg.' '.join(map(lambda x: ' $'+ str(x), my_lst))
wróciłby'$1 $2 $3 $4 $5 $6 $7 $8 $9 $10'
Dla początkujących bardzo przydatne jest ustalenie, dlaczego join jest metodą strunową .
Na początku jest to bardzo dziwne, ale potem bardzo przydatne.
Wynikiem łączenia jest zawsze ciąg znaków, ale łączony obiekt może być wielu typów (generatory, lista, krotki itp.).
.join
jest szybszy, ponieważ przydziela pamięć tylko raz. Lepsza niż klasyczna konkatenacja (patrz, wyjaśnienie rozszerzone ).Gdy się go nauczysz, jest to bardzo wygodne i możesz wykonywać takie sztuczki, aby dodawać nawiasy.
źródło
Chociaż odpowiedź @Burhan Khalid jest dobra, myślę, że jest bardziej zrozumiała:
Drugi argument funkcji join () jest opcjonalny i domyślnie ustawiony jest na „”.
EDYCJA: Ta funkcja została usunięta w Pythonie 3
źródło
Możemy określić, w jaki sposób mamy dołączyć ciąg. Zamiast „-” możemy użyć „”
źródło
Możemy również użyć funkcji redukcji Pythona :
źródło
join
?źródło