2012-04-25 6 views

risposta

10

concatenazione di stringhe è il modo migliore:

l = ['1', '2', '3', '4'] # original list 
s = ', '.join(l) + ',' 

ma avete altre opzioni anche:

  1. Mapping in stringhe virgola-ended, quindi unendo:

    l = ['1', '2', '3', '4'] # original list 
    s = ' '.join(map(lambda x: '%s,' % x, l)) 
    
  2. aggiungendo stringa vuota alla lista uniti (non modificare originale l elenco!):

    l = ['1', '2', '3', '4'] # original list 
    s = ', '.join(l + ['']).rstrip(' ') 
    
  3. Utilizzando la formattazione delle stringhe al posto di concatenazione:

    l = ['1', '2', '3', '4'] # original list 
    s = '%s,' % (', '.join(l)) 
    
+0

Si potrebbe voler cambiare 'l' a' s' per tutte le opzioni o viceversa? – okm

+0

@okm: hai ragione, grazie. – Tadeck

1

Per includere gli spazi che ho mostrato, è necessario disporre di uno spazio nella stringa di separazione:

s = ", ".join(l) + "," 

o renderlo DRYer:

sep = ", " 
s = (sep.join(l) + sep).rstrip() 

In quest'ultimo, rstrip() è solo utilizzato per rimuovere lo spazio finale finale (parte di sep) dato che non è in output desiderato. Non è il modo più economico per farlo, ma è abbastanza chiaro.

+0

ho già detto che io non voglio usare string concat – sam

+0

@aix: Sono d'accordo sul requisito. – Tadeck

+0

@aix: non proprio. Immagina che il loro separatore sia più complesso di una virgola (forse anche un'espressione) e non vogliono ripeterlo due volte o utilizzare una variabile temporanea. Ha perfettamente senso per me. – georg

4

Per str.join() lavorare, gli elementi contenuti nella iterabile (cioè un elenco qui), deve essere stringhe stessi. Se vuoi una virgola finale, aggiungi una stringa vuota alla fine del tuo elenco.

Modifica: Per carne fuori un po ':

l = map(str, [1,2,3,4]) 
l.append('') 
s = ','.join(l) 
+0

Grazie @MichaelWild - Mi stavo chiedendo perché ho sempre ottenuto una virgola finale nel mio codice, e si è scoperto che era perché l'ultima voce nella matrice che avevo era la stringa vuota. Saluti! – sdaau

1

In primo luogo, ','.join(l) non funzionerà affatto in quanto richiede gli elementi per essere stringhe, che non lo sono.

È possibile risolvere questo e aggiungere la virgola finale in questo modo:

In [4]: ', '.join(map(str, l)) + ',' 
Out[4]: '1, 2, 3, 4,' 

Penso che questo è di gran lunga il modo più pulito per farlo.

1

Se non si desidera la concatenazione, le cose potrebbero essere hacky ...

>>> l = [1, 2, 3, 4] 
>>> repr(l+[0])[1:-3] # or str 
'1, 2, 3, 4,' 
6

Se si è in Python 3, è possibile sfruttare la funzione di stampa integrata:

print(*l, sep=', ', end=',') 
  • *l scompatta l'elenco degli elementi di passarli come singoli argomenti per stampare
  • sep è un argomento opzionale che è impostato per tra gli elementi stampati da elementi, qui ho impostato a ', ' con uno spazio come richiesto
  • end è un argomento facoltativo che verrà inserito nella e della stringa stampata risultante. Ho impostato a ',' senza spazio per abbinare il vostro bisogno

Si può usare a partire Python 2.6 importando la funzione di stampa

from __future__ import print_function 

tuttavia andare in questo modo ha diversi avvertimenti:

  • Questo presuppone che tu voglia generare la stringa risultante in stdout; oppure puoi reindirizzare l'output in un file con l'argomento opzionale in un file
  • se sei in Python 2, l'importazione __future__ può violare la compatibilità del codice in modo da dover isolare il codice in un modulo separato se il resto del tuo codice non è compatibile.

Per farla breve, o questo metodo o le altre risposte proposte sono un sacco di sforzi per cercare di evitare solo l'aggiunta di un +',' alla fine del join stringa risultante

0

Questa sessione IDLE è un buon esempio di come tirare gli elementi della lista in una stringa con una virgola finale:

>>> l = ['1', '2', '3', '4'] 
>>> ' '.join(x+',' for x in l) 
'1, 2, 3, 4,' 
0

non so se questo è quello che stai cercando? Funziona comunque.

l = [1,2,3,4]

per num in l: stampa (str (num), fine = "")

Problemi correlati