2011-09-06 4 views
43

Fondamentalmente, sto provando a unire le voci in un set per produrre una stringa. Sto cercando di utilizzare la sintassi simile alla funzione di join per gli elenchi. Qui è il mio tentativo:Python: come unire le voci di un set in una stringa?

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?

risposta

99
', '.join(set_3) 

Il join è un metodo di stringa, non un metodo set.

+0

Grazie! Sono un programmatore di rubini, quindi questo è tutto nuovo per me. – Spencer

+10

se il tuo set contiene numeri interi/lunghi devi usare "',' .join (str (s) per s in set_3)' – NiCU

2

Penso che tu abbia appena fatto all'indietro.

print ", ".join(set_3) 
+0

valido sintassi no? 'print (", ".join (set_3))' – surfer190

+1

È valido in 2.7. – recursive

4

Il join è chiamato sulla stringa:

print ", ".join(set_3) 
3

Né il set né il list è tale metodo join, stringa l'ha:

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

Tra l'altro non si deve usare il nome list per le tue variabili. Dagli un list_, my_list o un altro nome perché la funzione python è molto spesso utilizzata list.

2

avete la join all'indietro provare:

print ', '.join(set_3) 
22

insiemi non hanno un metodo join ma è possibile utilizzare str.join invece.

', '.join(set_3) 

Il metodo str.join funziona su ogni oggetto iterabile inclusi elenchi e set.

Nota: fare attenzione sull'utilizzo di questo su set contenenti numeri interi; sarà necessario convertire i numeri interi in stringhe prima della chiamata da unire. Per esempio

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

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

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

Generalmente l'ordine rimarrà, ma per grandi set quasi certamente non lo faranno.

Infine, solo in caso le persone si stanno chiedendo, non è necessario un ',' nel join.

Basta: '' .join (set)

:)

Problemi correlati