Python: jak połączyć wpisy w zestawie w jeden ciąg?

85

Zasadniczo próbuję połączyć wpisy w zestaw, aby uzyskać jeden ciąg. Próbuję użyć składni podobnej do funkcji łączenia list. Oto moja próba:

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(", ")

Jednak otrzymuję ten błąd: AttributeError: 'set' object has no attribute 'join'

Jakie jest równoważne wezwanie do zestawów?

Spencer
źródło

Odpowiedzi:

166
', '.join(set_3)

Jest jointo metoda łańcuchowa, a nie metoda zestawu.

Jmjmh
źródło
14
jeśli twój zestaw zawiera liczby całkowite / długie, musisz użyć', '.join(str(s) for s in set_3)
55651909-089b-4e04-9408-47c5bf
32

Zestawy nie mają joinmetody, ale możesz jej użyć str.join.

', '.join(set_3)

str.joinMetoda będzie działać na każdym iterable obiektu w tym listy i zestawów.

Uwaga: bądź ostrożny przy używaniu tego na zestawach zawierających liczby całkowite; będziesz musiał przekonwertować liczby całkowite na łańcuchy przed wywołaniem złączenia. Na przykład

set_4 = {1, 2}
', '.join(str(s) for s in set_4)
Jack Edmonds
źródło
5

joinNazywa na ciąg znaków:

print ", ".join(set_3)
MByD
źródło
4

Ani metoda setani ta nie listma takiej metody join, ma ją string:

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

Nawiasem mówiąc, nie powinieneś używać nazw listdla swoich zmiennych. Daj mu list_, my_listlub jakąś inną nazwę, ponieważ listjest bardzo często używane funkcje Pythona.

Narty
źródło
4

Seta nie mają rozkaz - więc może stracić swoje zamówienie podczas konwersji listy do zestawu, tj:

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

Generalnie kolejność pozostanie, ale w przypadku dużych zestawów prawie na pewno nie.

Wreszcie, po prostu na wypadek, gdyby ludzie się zastanawiali, nie potrzebujesz znaku „,” w złączu.

Po prostu: „” .join (zestaw)

:)

Jan
źródło
3

Myślę, że masz to od tyłu.

print ", ".join(set_3)
rekurencyjny
źródło
Nieprawidłowa składnia, nie? print(", ".join(set_3))
stephen
1
Jest ważny w 2.7.
rekurencyjne
3

Masz instrukcję join wstecz, spróbuj:

print ', '.join(set_3)
Łowca
źródło
0

Napisałem metodę, która obsługuje następujące przypadki skrajne:

  • Ustaw rozmiar jeden. ", ".join({'abc'})Powróci "a, b, c". Moje pożądane wyjście to "abc".
  • Zestaw zawierający liczby całkowite.
  • Pusty zestaw powinien powrócić ""
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
źródło
Mogłem " ".join({'abc'})uzyskać żądane o / p "abc". kod wykonywalny w repl.it
Abhijeet
Ciekawy. Właśnie sobie uświadomiłem, że set ('abc') i {'abc'} mają różne zachowania. To mnie zrzuciło.
Fernando Irarrázaval G,
Zaktualizowałem kod wykonywalny, aby działał dla zestawu i słownika
Abhijeet
FYI, {'abc'} to zestaw. I "".join(set(ip_data))podaje losową kolejność liter (na przykład „bca”), ponieważ zbiór tworzy trzy elementy {'a', 'b', 'c'}, ale nie zachowuje porządku.
Fernando Irarrázaval G