Verketten Sie das Element in der Liste mit Zeichenfolgen


574

Gibt es eine einfachere Möglichkeit, Zeichenfolgenelemente in einer Liste zu einer einzelnen Zeichenfolge zu verknüpfen? Kann ich die str.join()Funktion nutzen?

Dies ist beispielsweise der Eingang ['this','is','a','sentence']und dies ist der gewünschte Ausgangthis-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

24
'-'.join(sentence)
Aland

Antworten:


1052

Verwendung join:

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

13
Ich habe nicht verstanden, was das '-' auf der linken Seite sein soll?
Lawrence DeSouza

5
@LawrenceDeSouza Die Zeichenfolge, der Sie beitreten möchten. Siehe die Dokumentation oder diese Antwort, die etwas detaillierter ist.
Burhan Khalid

9
Ich habe erwartet sentence.join(" "), dass es auch funktioniert, da die umgekehrte Operation ist list.split(" "). Haben Sie eine Idee, ob dies zu Pythons Methoden für Listen hinzugefügt wird?
Wouter Thielen

10
@Wouter wird es nicht. Einerseits können nur Listen von Zeichenfolgen verbunden werden. so list.joinwürde für eine beliebige Liste ungeeignet sein. str.joinAndererseits kann das Argument von eine beliebige "iterierbare" Folge von Zeichenfolgen sein, nicht nur eine Liste. Das einzige, was Sinn machen würde, ist eine eingebaute Funktion join(list, sep); Es gibt eine im (im Grunde veralteten) stringModul, wenn Sie es wirklich wollen.
Alexis

4
@ Leo' '.join(['this', 'is', 'a', 'sentence'])
Burhan Khalid

120

Eine allgemeinere Methode zum Konvertieren von Python-Listen in Zeichenfolgen wäre:

>>> 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'

3
Warum ist ein Listenverständnis erforderlich, wenn die Eingabe eine Zeichenfolge ist? auch map(str, my_lst)würde ausreichen , um ohne die Liste aufzählt =)
alvas

5
Die meisten Antworten auf diese Frage beziehen sich auf den Fall, dass die Liste Zeichenfolgen enthält. Meins ist eine generische Methode, um Listen in Zeichenfolgen umzuwandeln. In meinem Beispiel ist die Liste vom Typ, intaber es kann sich um einen beliebigen Typ handeln, der als Zeichenfolge dargestellt werden kann.
6pack Kind

3
Um dies hinzuzufügen, wäre map auch nützlich, wenn es mit einer Lambda-Funktion verwendet wird. Zum Beispiel ' '.join(map(lambda x: ' $'+ str(x), my_lst))würde zurückkehren'$1 $2 $3 $4 $5 $6 $7 $8 $9 $10'
ScottMcC

3
Das Hinzufügen einer Karte hilft tatsächlich bei Datentypen außer Zeichenfolgen. Großartig!
Appleboy

40

Für Anfänger ist es sehr nützlich zu wissen, warum Join eine String-Methode ist .

Am Anfang ist es sehr seltsam, aber danach sehr nützlich.

Das Ergebnis der Verknüpfung ist immer eine Zeichenfolge, aber das zu verbindende Objekt kann von vielen Typen sein (Generatoren, Listen, Tupel usw.).

.joinist schneller, weil es nur einmal Speicher zuweist. Besser als die klassische Verkettung (siehe erweiterte Erklärung ).

Sobald Sie es gelernt haben, ist es sehr bequem und Sie können solche Tricks ausführen, um Klammern hinzuzufügen.

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

>>> list = ["(",")"]
>>> ",".join("12345").join(list)
Out:
'(1,2,3,4,5)'

12

Obwohl die Antwort von @Burhan Khalid gut ist, denke ich, dass sie so verständlicher ist:

from str import join

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

join(sentence, "-") 

Das zweite Argument für join () ist optional und standardmäßig "".

BEARBEITEN: Diese Funktion wurde in Python 3 entfernt


14
Diese Funktion ist in 2.x veraltet und wird in 3.x entfernt. In diesem Fall würde ich nicht empfehlen, dies gegenüber der anderen Antwort zu verwenden.
Matthew Green

@Mathew Green Diese Antwort und die Antwort von Burhan Khalid verwenden dieselbe Funktion auf unterschiedliche Weise, sodass auch seine Antwort veraltet ist. Aber danke, dass Sie darauf hingewiesen haben, und finden Sie heraus, wie Sie an 3.x teilnehmen können. Aber wenn Sie 2.x verwenden, geht es nicht weg.
SilentVoid

1
Sein ist jedoch nicht veraltet. Ihre Empfehlung verwendet eine Funktion aus Lib / string.py, die völlig anders und veraltet ist, während die @ BurhanKhalid-Antwort die integrierte Zeichenfolgenmethode verwendet, die nicht veraltet ist. Seine Antwort ist jetzt und in Zukunft die richtigste, während dies vorerst nur für 2.x gut ist.
Matthew Green

Wenn Sie für diese Alternative werben möchten, sollten Sie auch eine Warnung einfügen, dass dies aus den in meinen vorherigen Kommentaren genannten Gründen nicht empfohlen wird.
Matthew Green

2

Wir können angeben, wie wir die Zeichenfolge verbinden müssen. Anstelle von '-' können wir '' verwenden

sentence = ['this','is','a','sentence']
s=(" ".join(sentence))
print(s)

2

Wir können auch die Reduktionsfunktion von Python verwenden:

from functools import reduce

sentence = ['this','is','a','sentence']
out_str = str(reduce(lambda x,y: x+"-"+y, sentence))
print(out_str)

4
Zu viel unnötige Komplexität, warum nicht einfach verwenden join?
Sebastian Palma

-1
def eggs(someParameter):
    del spam[3]
    someParameter.insert(3, ' and cats.')


spam = ['apples', 'bananas', 'tofu', 'cats']
eggs(spam)
spam =(','.join(spam))
print(spam)

2
Während dieses Code-Snippet die Lösung sein kann, hilft das Hinzufügen einer Erklärung wirklich, die Qualität Ihres Beitrags zu verbessern. Denken Sie daran, dass Sie die Frage für Leser in Zukunft beantworten und diese Personen möglicherweise die Gründe für Ihren Codevorschlag nicht kennen.
alan.elkin
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.