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?

Antworten:


165
', '.join(set_3)

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


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)

5

Das joinwird auf der Zeichenfolge aufgerufen:

print ", ".join(set_3)

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.


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)

:) :)


3

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

print ", ".join(set_3)

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)

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

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