Python: Wie füge ich Einträge in einem Satz zu einer Zeichenfolge zusammen?

84

Grundsätzlich versuche ich, die Einträge in einem Satz zusammenzufügen, um eine Zeichenfolge auszugeben. Ich versuche, eine Syntax zu verwenden, die der Join-Funktion für Listen ähnelt. Hier ist mein Versuch:

list = ["gathi-109","itcg-0932","mx1-35316"]
set_1 = set(list)
set_2 = set(["mx1-35316"])
set_3 = set_1 - set_2
print set_3.join(", ")

Ich erhalte jedoch diesen Fehler: AttributeError: 'set' object has no attribute 'join'

Was ist der entsprechende Aufruf für Mengen?

Spencer
quelle

Antworten:

165
', '.join(set_3)

Das joinist eine String-Methode, keine Set-Methode.

Jmjmh
quelle
Vielen Dank! Ich bin ein Ruby-Programmierer, das ist alles neu für mich.
Spencer
14
Wenn Ihr Set Ganzzahlen / Longs enthält, müssen Sie', '.join(str(s) for s in set_3)
55651909-089b-4e04-9408-47c5bf
grrr Python beitreten
Robert Moskal
Es fühlt sich für mich irgendwie rückwärts an, aber das ist richtig. Stellt die Frage: Geht es um das Komma oder um den Listeninhalt?
Ivotje50
31

Sets haben keine joinMethode, können aber str.joinstattdessen verwendet werden.

', '.join(set_3)

Die str.joinMethode funktioniert für alle iterierbaren Objekte, einschließlich Listen und Mengen.

Hinweis: Seien Sie vorsichtig, wenn Sie dies für Mengen verwenden, die Ganzzahlen enthalten. Sie müssen die Ganzzahlen vor dem Aufruf zum Beitritt in Zeichenfolgen konvertieren. Zum Beispiel

set_4 = {1, 2}
', '.join(str(s) for s in set_4)
Jack Edmonds
quelle
5

Das joinwird auf der Zeichenfolge aufgerufen:

print ", ".join(set_3)
MByD
quelle
4

Weder das setnoch das listhat eine solche Methode join, der String hat es:

','.join(set(['a','b','c']))

Übrigens sollten Sie listfür Ihre Variablen keinen Namen verwenden . Geben Sie ihm einen list_, my_listoder einen anderen Namen , weil listsehr oft Python - Funktion verwendet wird.

Ski
quelle
4

Set haben Sie nicht einen Auftrag - so Sie können Ihre Bestellung verlieren , wenn Sie Ihre Liste in einen Satz zu konvertieren, das heißt:

>>> orderedVars = ['0', '1', '2', '3']
>>> setVars = set(orderedVars)
>>> print setVars
('4', '2', '3', '1')

Im Allgemeinen bleibt die Reihenfolge bestehen, bei großen Sets jedoch mit ziemlicher Sicherheit nicht.

Nur für den Fall, dass sich die Leute fragen, brauchen Sie kein ',' im Join.

Nur: '' .join (set)

:) :)

John
quelle
3

Ich denke du hast es einfach rückwärts.

print ", ".join(set_3)
rekursiv
quelle
Ungültige Syntax nein? print(", ".join(set_3))
Stephen
1
Es ist gültig in 2.7.
rekursiv
3

Sie haben die Join-Anweisung rückwärts versucht:

print ', '.join(set_3)
Jäger
quelle
0

Ich habe eine Methode geschrieben, die die folgenden Randfälle behandelt:

  • Stellen Sie Größe eins ein. A ", ".join({'abc'})wird zurückkehren "a, b, c". Meine gewünschte Ausgabe war "abc".
  • Set einschließlich Ganzzahlen.
  • Der leere Satz sollte zurückkehren ""
def set_to_str(set_to_convert, separator=", "):
        set_size = len(set_to_convert)
        if not set_size:
            return ""
        elif set_size == 1:
            (element,) = set_to_convert
            return str(element)
        else:
            return separator.join(map(str, set_to_convert))
Fernando Irarrázaval G.
quelle
Könnte verwendet haben " ".join({'abc'}), um das gewünschte O / P zu erhalten "abc". ausführbarer Code in repl.it
Abhijeet
Interessant. Ich habe gerade festgestellt, dass set ('abc') und {'abc'} unterschiedliche Verhaltensweisen haben. Das hat mich umgehauen.
Fernando Irarrázaval G
Ich habe den ausführbaren Code aktualisiert , um für set & dictionary
Abhijeet
Zu Ihrer Information, {'abc'} ist eine Menge. Und "".join(set(ip_data))gibt eine zufällige Reihenfolge der Buchstaben an (Beispiel 'bca'), da set drei Elemente {'a', 'b', 'c'} erstellt, aber die Reihenfolge nicht beibehält.
Fernando Irarrázaval G