Python: come unire le voci di un set in una stringa?


85

Fondamentalmente, sto cercando di unire le voci in un set per produrre una stringa. Sto cercando di utilizzare una sintassi simile alla funzione di join per gli elenchi. Ecco il mio tentativo:

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

Tuttavia ottengo questo errore: AttributeError: 'set' object has no attribute 'join'

Qual è la chiamata equivalente per i set?

Risposte:



32

I set non hanno un joinmetodo ma puoi usarli str.joininvece.

', '.join(set_3)

Il str.joinmetodo funzionerà su qualsiasi oggetto iterabile inclusi elenchi e set.

Nota: fai attenzione a usarlo su insiemi contenenti numeri interi; dovrai convertire gli interi in stringhe prima della chiamata per partecipare. Per esempio

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

5

La joinsi chiama sulla stringa:

print ", ".join(set_3)

4

Né il setné il listha tale metodo join, la stringa lo ha:

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

A proposito, non dovresti usare il nome listper le tue variabili. Dargli una list_, my_listo qualche altro nome perché listfunzione Python viene utilizzato molto spesso.


4

Set di non hanno un ordine - così si può perdere il vostro ordine quando si converte la lista in una serie, vale a dire:

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

Generalmente l'ordine rimarrà, ma quasi certamente no.

Infine, nel caso in cui le persone si chiedano, non è necessario un "," nel join.

Solo: '' .join (set)

:)


3

Penso che tu lo abbia solo al contrario.

print ", ".join(set_3)

Sintassi non valida no? print(", ".join(set_3))
stephen

1
È valido in 2.7.
ricorsivo

3

Hai l'istruzione di join al contrario, prova:

print ', '.join(set_3)

0

Ho scritto un metodo che gestisce i seguenti casi limite:

  • Imposta la taglia uno. A ", ".join({'abc'})tornerà "a, b, c". Il mio output desiderato era "abc".
  • Impostare includendo numeri interi.
  • Il set vuoto dovrebbe tornare ""
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))

Potrebbe essere usato " ".join({'abc'})per ottenere l'o / p desiderato "abc". codice eseguibile in repl.it
Abhijeet

Interessante. Ho appena realizzato che set ('abc') e {'abc'} hanno comportamenti diversi. Questo è ciò che mi ha sconvolto.
Fernando Irarrázaval G

Ho aggiornato il codice eseguibile per funzionare per set e dizionario
Abhijeet

Cordiali saluti, {'abc'} è un set. E "".join(set(ip_data))fornisce un ordine casuale delle lettere (esempio, 'bca') perché set crea tre elementi {'a', 'b', 'c'} ma non conserva l'ordine.
Fernando Irarrázaval G
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.