2014-03-18 29 views
0

我想創建創建,在長度不同的幾個表列的輸出,如:控制檯列輸出在python3

list1 = ['hello', 'hello', 'hello', 'hello', 'hello', 'goodbye'] 
list2 = ['hello', 'hello', 'hello'] 
list3 = ['hello', 'hello', 'hello', 'hello'] 

所需的輸出:

hello hello hello 
hello hello hello 
hello hello hello 
hello   hello 
hello 
goodbye 

單獨列表可以相當長,並且列表以我們在列表中匹配項目和打印匹配等方式鏈接,因此需要以列格式進行。

除了打印所需的輸出外,我已經研究過如何做其他事情。

我玩過拉鍊,但是從我有限的經驗來看,它似乎並不喜歡不同長度的列表,但我當然可以這樣做。 ;-)

基本上我被卡住了。 :-(

回答

0

事實上,拉鍊只對項目達到最短的迭代器。你所尋找的是

itertools.zip_longest 

這將配對從不同的迭代器的元素和使用時的迭代功虧一簣一個fillvalue。

例如:

from itertools import zip_longest 

for elems in zip_longest(list1, list2, list3): 
    for e in elems: 
     print(e or '\t', end=" ") 
    print() 
+0

感謝那這肯定我期待的功能不過,我似乎無法得到它在列的格式打印上面WOR您的代碼。 ks,但它會在單獨的行上打印每個項目。如果我在第一個for循環之後使用print('%s%s'%(elems))來打印列中的列表,但它不會在這些值之間放置空格併爲空白輸出'none'。真的,我需要結合這兩種方法,但我沒有足夠的知識來做到這一點。任何幫助,將不勝感激。 –

+0

每個項目在一個單獨的行? print(e,end =「」)不應插入換行符;這些將由print()插入到每行的末尾或元素的組合中。 None的字符串表示 - zip_longest的默認填充值是「無」,因此您應該避免檢查它。我更新了代碼。 – jminuscula

+0

用你的新代碼編輯,我們可能會弄清楚發生了什麼:) – jminuscula