2012-09-17 16 views
221

Czy istnieje prostszy sposób łączenia elementów ciągów na liście w jeden ciąg znaków? Czy można użyć funkcji str.join() do dołączania elementów do listy?Łączenie pozycji na liście z ciągami znaków

E.g. to jest wejście ['this','is','a','sentence'] i to jest pożądane wyjście this-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 
+9

' '-'. Join (zdanie)' – aland

Odpowiedz

461

Zastosowanie join:

>>> sentence = ['this','is','a','sentence'] 
>>> '-'.join(sentence) 
'this-is-a-sentence' 
+7

nie rozumiała, co się '-' po lewej stronie ma być ?? –

+4

@LawrenceDeSouza Ciąg, który chcesz dołączyć; patrz [dokumentacja] (https://docs.python.org/2/library/stdtypes.html#string-methods) lub [ta odpowiedź] (http://stackoverflow.com/questions/1876191/explain-python -join), który idzie nieco bardziej szczegółowo. –

+1

W pewnym sensie oczekiwałem również funkcji 'sentence.join (" ")', ponieważ operacja odwrotna to 'list.split (" ")'. Masz pomysł, czy to będzie dodane do list Pythona? –

7

Chociaż @Burhan Khalid's answer jest dobry, myślę, że to bardziej zrozumiałe tak:

from str import join 

sentence = ['this','is','a','sentence'] 

join(sentence, "-") 

drugi argument do join() jest opcjonalny i domyślnie "".

EDIT: Funkcja ta została usunięta w Pythonie 3

+6

[Ta funkcja jest nieaktualna w wersji 2.x i zostanie usunięta w wersji 3.x.] (https://docs.python.org/2/library/string.html#deprecated-string-functions) W tym przypadku , Nie polecałbym używania tego w stosunku do innych dostarczonych odpowiedzi. –

+0

@ Mathew Green ta odpowiedź i odpowiedź Burhan Khalid używają tej samej funkcji na różne sposoby, więc jego odpowiedź również jest przestarzała. Ale dzięki za wskazanie, Gota dowiedzieć się, jak dołączyć do 3.x. Ale jeśli używasz wersji 2.x, to nie zniknie. – SilentVoid

+1

Jego nie jest jednak przestarzałe.Twoja rekomendacja używa funkcji z pliku Lib/string.py, która jest zupełnie inna _i_ uznana za przestarzałą, podczas gdy odpowiedź @BurhanKhalid używa wbudowanej metody łańcuchowej, która nie jest przestarzała. Jego odpowiedź jest teraz najbardziej poprawna i idę naprzód, podczas gdy to jest dobre tylko teraz na 2.x. –

57

sposób bardziej ogólny do zamiany list Pythonie ciągi byłoby:

>>> my_lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
>>> my_lst_str = ''.join(map(str, my_lst)) 
>>> print(my_lst_str) 
'12345678910' 
+1

dlaczego zrozumienie listy jest konieczne, gdy dane wejściowe są ciągami? również 'map (str, my_lst)' byłoby wystarczające bez wyliczenia listy =) – alvas

+4

Większość odpowiedzi na to pytanie rozważa przypadek, gdy lista zawiera łańcuchy. Mój jest ogólnym sposobem konwertowania list na ciągi. W moim przykładzie lista ma typ 'int', ale może to być dowolny typ, który może być reprezentowany jako ciąg. –

+0

@alvas dzięki, zaktualizowałem moją odpowiedź. –

15

Jest to bardzo przydatne dla początkujących, aby wiedzieć why join is a string method

Na początku jest to bardzo dziwne, ale bardzo przydatne po tym.

Wynik przyłączyć zawsze jest ciągiem, ale obiekt do połączenia może być z wielu typów (generatorów, lista, krotki itp)

.join jest szybsza, ponieważ przydziela pamięć tylko raz. Lepsza niż klasyczna konkatenacja. extended explanation

Gdy się go nauczysz, jest bardzo wygodny i możesz robić takie sztuczki, aby dodać nawiasy.

>>> ",".join("12345").join(("(",")")) 
    '(1,2,3,4,5)' 

    >>> lista=["(",")"] 
    >>> ",".join("12345").join(lista) 
    '(1,2,3,4,5)' 
+0

Whoa, cool. Miejmy przygotowane przeze mnie :) – Blacksilver

Powiązane problemy