2017-09-08 37 views
0

我有幾個列表要連接到列表的新列表中。例如,列表可能是這樣的:將列表連接到列表的新列表中

[[], []] 
[[3], [1]] 
[[], [5]] 
[[2,5], []] 

,並在此基礎上我想輸出的樣子:

[[3, 2, 5], [1,5]] 

我們不能假設有關清單的長度什麼(他們不會在開始時總是有兩個元素,他們可能會有更多)。

這裏是我試過的代碼:

list1[l] += list2[l] #where l is an index 
+0

您是否保證每個頂級列表中的對象數相同?) – Grigoriy

+1

您的問題是什麼?你嘗試了什麼?什麼沒有奏效?發佈您的代碼。 – DyZ

+0

@Grigoriy是的,他們將永遠匹配 –

回答

1

如果我們知道每個頂級列表形狀其他所有比賽,那麼我們可以做這樣的事情使用列表解析:

lists = [ 
     [[], []], 
     [[3], [1]], 
     [[], [5]], 
     [[2,5], []], 
    ] 
shape=len(lists[0]) 
res = [[val for lst in lists for val in lst[i]] for i in range(shape) ] 
print(res) 

輸出:

[[3, 2, 5], [1, 5]] 
+0

這完美的作品,謝謝! –

1
lst = [[[], []],[[3], [1]],[[], [5]],[[2,5], []]] 

lstFinal = [] 
for i in range(0,len(lst[0])): 
    temp = [] 
    for j in range(0,len(lst)): 
     temp.extend(lst[j][i]) 
    lstFinal.append(temp) 
print(lstFinal) 
1
from functools import reduce 
from operator import add 

a = [[], []] 
b = [[3], [1]] 
c = [[], [5]] 
d = [[2,5], []] 

# transpose 
z = zip(a, b, c, d) 
# list(z) --> [([], [3], [], [2, 5]), ([], [1], [5], [])] 

# flatten 
def f(t): 
    return reduce(add, t) 

m = map(f, z) 

# result  
for thing in m: 
    print(thing) 

>>> 
[3, 2, 5] 
[1, 5] 
>>>