web-dev-qa-db-de.com

Python: Wie füge ich Einträge in einer Menge zu einem String zusammen?

Grundsätzlich versuche ich, die Einträge in einem Set zusammenzufügen, um einen String auszugeben. Ich versuche, eine Syntax ähnlich der Join-Funktion für Listen zu verwenden. 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 diese Fehlermeldung: AttributeError: 'set' object has no attribute 'join'

Was ist der äquivalente Aufruf für Sets? 

53
Spencer
', '.join(set_3)

Die Variable join ist eine Zeichenfolgenmethode und keine Mengenmethode.

117
Jmjmh

Sets haben keine join-Methode, Sie können stattdessen str.join verwenden.

', '.join(set_3)

Die str.join-Methode funktioniert für jedes iterierbare Objekt, einschließlich Listen und Sets.

Hinweis: Seien Sie vorsichtig bei der Verwendung von Mengen, die ganze Zahlen enthalten. Sie müssen die Ganzzahlen vor dem Aufruf zum Verknüpfen in Strings konvertieren. Zum Beispiel

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

Die Variable join wird in der Zeichenfolge aufgerufen:

print ", ".join(set_3)
5
MByD

Sets haben keine Bestellung - so dass Sie möglicherweise Ihre Bestellung verlieren, wenn Sie Ihre Liste in ein Set konvertieren, d. H .:

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

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

Schließlich, nur für den Fall, dass sich die Leute wundern, brauchen Sie kein ',' im Join.

Einfach: '' .join (set)

:)

4
John

Weder die set noch die list haben eine solche Methode join.

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

Übrigens sollten Sie nicht den Namen list für Ihre Variablen verwenden. Vergeben Sie einen list_, my_list oder einen anderen Namen, da list sehr häufig eine Python-Funktion verwendet.

4
Ski

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

print ", ".join(set_3)
3
recursive

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

print ', '.join(set_3)
3
Hunter

Ich habe eine Methode geschrieben, die die folgenden Edge-Fälle behandelt:

  • Legen Sie die Größe 1 fest. Eine ", ".join({'abc'}) gibt "a, b, c" zurück. Meine gewünschte Ausgabe war "abc".
  • Set mit ganzen Zahlen.
  • Ein leerer Satz sollte "" zurückgeben.
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))