2013-05-21 27 views
4

表如果我有三個列表,如印刷列出到在Python

a = [1, 2, 3] 
b = [4, 5, 6] 
c = [7, 8, 9] 

,並希望將其打印出來這樣

1 4 7 
2 5 8 
3 6 9 

我將如何做呢?

+0

meaby重複HTTP ://stackoverflow.com/questions/13214809/pretty-print-2d-python-list,http://stackoverflow.com/questions/9712085/numpy-pretty-print-tabular-data,http:// st ackoverflow.com/questions/5909873/python-pretty-printing-ascii-tables – gustavodiazjaimes

回答

6

這應做到:

'\n'.join(' '.join(map(str,tup)) for tup in zip(a,b,c)) 
+3

+1,如果沒有其他原因,那麼你在36秒內回答了這個問題。 – John

+1

我想你想要''',因爲OP在列之間有兩個空格。或者把它保留爲''''並且'str(x).ljust(2)'而不是'str'。 – abarnert

+0

等等,這是錯誤的...... OP正在嘗試打印轉換的列表。 – abarnert

8

的這個困難的部分是轉置陣。但是,這很容易,用zip

a = [1, 2, 3] 
b = [4, 5, 6] 
c = [7, 8, 9] 
t = zip(a, b, c) 

現在你只需把它打印出來:

print('\n'.join(' '.join(map(str, row)) for row in t)) 
+2

恕我直言,一個非常可讀的解決方案。我喜歡將zip分開(不像其他答案),因爲轉置和顯示是完全不同的事情。 –

2

隨着列表理解發電機表達,沒有地圖功能:

'\n'.join(' '.join(str(y) for y in x) for x in zip(a,b,c)) 
+0

首先,如果你正在做的是映射一個已經存在的很好命名的函數,爲什麼不使用'map'?是的,當你不得不建立'lambda'或'partial'時,它的可讀性會降低,但在這種情況下,我認爲它是可讀的。 (此外,您在這裏沒有列表理解,您有一個生成器表達式。) – abarnert

+0

這正是我一直在尋找的。謝謝! – Outpost67

+0

@abarnert:你只是自己回答你的問題:map不必要地創建了一個列表,因爲我使用了一個生成器表達式(對於錯誤的命名,編輯它),所以不會創建這個列表。發電機比列表清潔。我還應該使用zip的功能等效,因此將'from itertools import izip as zip'添加到腳本的頂部。 – pvoosten