2012-08-23 8 views
8

Angenommen, ich habe diese beiden Listen:Schleife durch zwei Listen drucken mit zwei Spalten zu bekommen fixiert (custom set) Raum zwischen dem ersten Buchstaben jedes Element jeder Liste

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

Wie Schleife ich durch diese drucken zwei Listen, während ein benutzerdefiniertes, festes Leerzeichen verwendet wird (z. B. 10, wie im Beispiel), beginnend mit dem ersten Buchstaben jedes Elements der ersten Liste bis zum ersten Buchstaben jedes Elements der zweiten Liste?

Beispiel Ausgang eines Sollabstand von 10:

soft  skin 
pregnant woman 
tall  man 
+2

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

Antwort

8

leicht mit dem string formatting getan,

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

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

Oder Sie können str.ljust verwenden, die aufgeräumter, wenn Sie die Polsterung haben wollen auf eine Variable basieren:

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

(Anmerkung: padding ist 9 statt 10 wegen der hartcodierte Leerzeichen zwischen den Wörtern)

+0

Wie geschrieben, haben beide Lösungen drei Leerzeichen, nicht zwei, zwischen dem "t" von "schwanger" und dem "w" von "Frau". Sie können den Platz in der gedruckten Zeichenfolge entfernen, denke ich. – DSM

+0

Angenommen, die Elemente der zweiten Spalte würden Zeichenfolgen enthalten, die länger sind als die Breite meines Terminalbildschirms. Das Standardverhalten ist, dass diese Zeichenfolgen über meine erste Spalte "verschütten". Wie lassen sich solche langen Strings vom Startpunkt der zweiten Spalte aus fortsetzen? – Bentley4

+0

@DSM Wahr, die Reduzierung der Füllmenge um eins stimmt exakt mit der erwarteten Ausgabe überein. Das Entfernen des Leerzeichens zwischen den% s kann dazu führen, dass die Wörter zusammengefügt werden. Bearbeitete Antwort – 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

Wie wäre:

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

One-Liner mit neuer Stil-String-Formatierung:

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

Python 3

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

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