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?

Odpowiedzi:



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)


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.


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)

:)



3

Masz instrukcję join wstecz, spróbuj:

print ', '.join(set_3)

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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.