2012-08-23 6 views
8

Supponiamo che io ho queste due liste:Loop stampare attraverso due liste per ottenere due colonne con fisso (set personalizzato) spazio tra la prima lettera di ogni elemento di ogni lista

column1 = ["soft","pregnant","tall"] 
column2 = ["skin","woman", "man"] 

Come faccio ciclo di stampa tramite questi due elenchi mentre si utilizza uno spazio fisso personalizzato (ad esempio 10, come nell'esempio) a partire dalla prima lettera di ciascun elemento del primo elenco fino alla prima lettera di ciascun elemento del secondo elenco?

uscita Esempio di spaziatura insieme di 10:

soft  skin 
pregnant woman 
tall  man 
+2

zip http://docs.python.org/library/functions.html#zip – bpgergo

risposta

8

facilmente fatto con la string formatting,

column1 = ["soft","pregnant","tall"] 
column2 = ["skin","woman", "man"] 

for c1, c2 in zip(column1, column2): 
    print "%-9s %s" % (c1, c2) 

Oppure è possibile utilizzare str.ljust, che è più ordinato, se si vuole avere l'imbottitura essere basata su una variabile:

padding = 9 
for c1, c2 in zip(column1, column2): 
    print "%s %s" % (c1.ljust(padding), c2) 

(nota: imbottitura è 9 invece di 10 a causa dello spazio hard-coded tra le parole)

+0

Come scritto, entrambe queste soluzioni avranno tre spazi, non due, tra la "t" di "incinta" e la "w" di "donna". Puoi rimuovere lo spazio nella stringa stampata, credo. – DSM

+0

Supponiamo che gli elementi della seconda colonna contengano stringhe più lunghe della larghezza del mio schermo terminale. Il comportamento predefinito è che quelle stringhe si "riverseranno" sulla mia prima colonna. Come lasciare che ognuna di queste lunghe stringhe continui dal punto di partenza della seconda colonna? – Bentley4

+0

@DSM Vero, riducendo la quantità di riempimento di un'unità corrisponderà esattamente all'uscita prevista. Rimuovendo lo spazio tra '% s' potrebbe risultare che le parole siano state mescolate insieme. Risposta modificata – dbr

3
column1 = ["soft","pregnant","tall"] 
column2 = ["skin","woman", "man"] 

for row in zip(column1, column2): 
    print "%-9s %s" % row # formatted to a width of 9 with one extra space after 
4

stai:

>>> column1 = ["soft","pregnant","tall"] 
>>> column2 = ["skin","woman", "man"] 
>>> for line in zip(column1, column2): 
...  print '{:10}{}'.format(*line) 
... 
soft  skin 
pregnant woman 
tall  man 
0

uno di linea utilizzando la nuova formattazione di stringhe stile:

>>> column1 = ["soft", "pregnant", "tall"] 
>>> column2 = ["skin", "woman", "man"] 

>>> print "\n".join("{0}\t{1}".format(a, b) for a, b in zip(column1, column2)) 

soft  skin 
pregnant woman 
tall  man 
0

usare Python 3

column1 = ["soft","pregnant","tall"] 
column2 = ["skin","woman", "man"] 

for line in zip(column1, column2): 
    print('{:10}{}'.format(*line)) 
Problemi correlati