2012-08-23 8 views
8

Supongamos que tengo estas dos listas:Loop impresión a través de dos listas de obtener dos columnas con fijo (establecido la costumbre) el espacio entre la primera letra de cada elemento de cada lista

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

¿Cómo bucle de impresión a través de estos dos listas al usar un espacio fijo personalizado (digamos 10, como en el ejemplo) comenzando desde la primera letra de cada elemento de la primera lista hasta la primera letra de cada elemento de la segunda lista?

Ejemplo de salida de un conjunto de separación 10:

soft  skin 
pregnant woman 
tall  man 
+2

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

Respuesta

8

hace fácilmente con la string formatting,

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

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

O puede utilizar str.ljust, que es más ordenado si usted quiere tener el relleno estar basada en una variable:

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

(nota: el relleno es 9 en lugar de 10 debido al espacio codificado entre las palabras)

+0

Como está escrito, estas dos soluciones tendrán tres espacios, no dos, entre la "t" de "embarazada" y la "w" de "mujer". Puede eliminar el espacio en la cadena impresa, creo. – DSM

+0

Supongamos que los elementos de la segunda columna contienen cadenas más largas que el ancho de la pantalla de mi terminal. El comportamiento predeterminado es que esas cadenas se "derramarán" sobre mi primera columna. ¿Cómo puedo permitir que cada cadena larga continúe desde el punto inicial de la segunda columna? – Bentley4

+0

@DSM Es cierto, la reducción de la cantidad de relleno en uno coincidirá exactamente con la salida esperada. Eliminar el espacio entre '% s' puede hacer que las palabras se junten juntas. Respuesta editada – 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

Cómo sobre: ​​

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

Un revestimiento usando el nuevo formato de cadenas estilo:

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

usando Python 3

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

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