2016-11-24 76 views
2

我有一組名單:排序在Python 3所列出到1格式化列表

A = [[A1,A2,A3],[A4,A5,A6]...,[A(n-2),A(n-1),A(n)]] #A has length n 
B = [[B1,B2,B3],[B4,B5,B6]...,[B(n-2),B(n-1),B(n)]] #B has length n 
C = [[C1,C2,C3],[C4,C5,C6]...,[C(n-2),C(n-1),C(n)]] #C has length n 

,我想它歸類到以下格式:

f = [(A1,A2,A3,B1,B2,B3,C1,C2,C3),(A4,A5,A6,B4,B5,B6,C4,C5,C6),...,(A(n-2),A(n-1),A(n),B(n-2),B(n-1),B(n),C(n-2),C(n-1),C(n))] 

我是很新,蟒蛇,我不能想辦法做到這一點。

任何輸入將不勝感激。

伊夫開始使用:

for item in range(len(A)): 
    f[item][0] = A[item][0] 
    f[item][1] = A[item][1] 
    f[item][2] = A[item][2] 

for item in range(len(B)): 
    f[item][3] = B[item][0] 
    f[item][4] = B[item][1] 
    f[item][5] = B[item][2] 

for item in range(len(C)): 
    f[item][6] = C[item][0] 
    f[item][7] = C[item][1] 
    f[item][8] = C[item][2] 

但是,這只是設置於F的所有項目等於f中由於某種原因的最後一個項目。使用zip

回答

1

交織子列表,並與這個漂亮的一個班輪扁平化與itertools.chain所產生的子列表列表中的理解:

import itertools 

A = [["A1","A2","A3"],["A4","A5","A6"]] #A has length n 
B = [["B1","B2","B3"],["B4","B5","B6"]] #B has length n 
C = [["C1","C2","C3"],["C4","C5","C6"]] #C has length n 

print([tuple(itertools.chain(*l)) for l in zip(A,B,C)]) 

結果:

[('A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3'), ('A4', 'A5', 'A6', 'B4', 'B5', 'B6', 'C4', 'C5', 'C6')] 

,如果你有一個變量一般情況下,存儲在列表中的列表數量:

list_of_lists = [A,B,C] 

print([tuple(itertools.chain(*l)) for l in zip(*list_of_lists)]) 

(使用*運營商擴展列表項目參數爲zip

注:效果很好,如果子表有不同的長度,只要有每個列表中的許多子表(其他zip將下降的最後一個(或多個) ):

A = [["A1","A2","A3"],["A4","A5","A6","A7"],["I will be discarded"]] #A has length n+1, last element will be lost 
B = [["B1","B2","B3","B3bis"],["B4","B5","B6"]] #B has length n 
C = [["C0","C1","C2","C3"],["C4","C5","C6"]] #C has length n 

產量:

[('A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'B3bis', 'C0', 'C1', 'C2', 'C3'), ('A4', 'A5', 'A6', 'A7', 'B4', 'B5', 'B6', 'C4', 'C5', 'C6')] 
+0

非常感謝,我能得到這個工作,如果列出了不同長度的?將所有列表與最大列表的長度相等會更容易嗎? – user3208454