2017-06-27 37 views
-1

關於如何拉鍊不等列表,我發現了很多問題/答案。但是,在所有情況下,生成的集合都會填充較短列表的背面。我想在較短的名單上加上前綴。拉鍊不等列表,填充較短列表的開頭

list1 = [a, b, c, d, e] (pretend these are numbers) 
list2 = [3, 4, 5] 

fun(list1, list2) => [(a, None), (b, None), (c, 3), (d, 4), (e, 5)] 

獎勵:

fun(list1, list2) => [(a, 0), (b, 0), (c, 3), (d, 4), (e, 5)] 
+1

好吧,那你試着和它有什麼問題呢? – jonrsharpe

+0

@jonrsharpe我沒有嘗試任何東西,因爲我不知道該怎麼嘗試。我相信這是完全合法的。 – SteveJ

+2

我不同意; SO不是代碼編寫服務,你應該自己花一些實際的努力來處理這些事情。 – jonrsharpe

回答

3
from itertools import zip_longest 

list1 = ['a', 'b', 'c', 'd', 'e'] 
list2 = [3, 4, 5] 

result = [tup for tup in zip_longest(list1[::-1], list2[::-1], fillvalue=0)][::-1] 
print(result) 
# [('a', 0), ('b', 0), ('c', 3), ('d', 4), ('e', 5)] 
+0

謝謝傑伊......我的理解是正確的 - 你正在翻轉兩個列表的順序,進行正常的不等列表壓縮,然後再翻轉一下? – SteveJ

+0

是的,這是正確的,除非當最短列表耗盡時,不等列表的正常壓縮將停止,而當最長列表耗盡時zip_longest停止。 – Jay

+0

偉大的答案:)雖然如果你這樣做,你的同事和/或老師可能會感激你堅持這個在一個有名的功能...... –

1
def left_pad_list(a_list,n,fillval=None): 
    return [fillval]*(n-len(a_list)) + list(a_list) 

我猜? (那麼其確定哪些事是長/短)

my_lists = [list1,list2,list3] 
max_len = max(my_lists,key=len) 
my_new_lists = [left_pad_list(x,max_len,0) for x in my_lists]