【问题标题】:Sorting 3 lists in python into 1 formatted list将python中的3个列表排序为1个格式化列表
【发布时间】:2016-11-24 22:32:34
【问题描述】:

我有一组列表:

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))]

我对 python 还很陌生,我想不出办法。

我们将不胜感激。

我开始使用:

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 中的最后一项。

【问题讨论】:

    标签: list python-3.x sorting


    【解决方案1】:

    使用zip 交错子列表,并使用这个漂亮的单线在列表理解中使用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')]
    

    【讨论】:

    • 非常感谢,如果列表长度不同,我可以让它工作吗?让所有列表都等于最大列表的长度会更容易吗?
    猜你喜欢
    • 2016-12-26
    • 2019-02-12
    • 2016-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    相关资源
    最近更新 更多