代码之家  ›  专栏  ›  技术社区  ›  fc27

如何在Python中合并来自3个不同列表的嵌套子列表的元素?

  •  0
  • fc27  · 技术社区  · 2 年前

    我有三个清单:

    A = [["a", "b", "c"],["f", "b", "a"]]
    numbers = [[1, 2 ,3], [1, 2, 3]]
    frequency = [[0.2, 0.5, 0.7], [0.1, 0.8, 0.9]]
    
    

    并希望获得以下组合列表:

    comb = [[("a",1,0.2), ("b",2,0.5), ("c",3,0.7)],[("f",1,0.1), ("b",2,0.8), ("a",3,0.9)] 
    

    我尝试使用连接,但子列表没有按预期合并。我怎样才能得到合并列表?谢谢

    2 回复  |  直到 2 年前
        1
  •  3
  •   j1-lee    2 年前

    您可以使用 zip 两次:

    A = [["a", "b", "c"],["f", "b", "a"]]
    numbers = [[1, 2 ,3], [1, 2, 3]]
    frequency = [[0.2, 0.5, 0.7], [0.1, 0.8, 0.9]]
    
    output = [list(zip(*zipped)) for zipped in zip(A, numbers, frequency)]
    print(output)
    # [[('a', 1, 0.2), ('b', 2, 0.5), ('c', 3, 0.7)], [('f', 1, 0.1), ('b', 2, 0.8), ('a', 3, 0.9)]]
    

    或者,您可以使用 itertools.starmap 要获取(一个或多个)迭代器,请执行以下操作:

    from itertools import starmap
    
    output = starmap(zip, zip(A, numbers, frequency))
    
    for subzip in output:
        print(*subzip)
    # ('a', 1, 0.2) ('b', 2, 0.5) ('c', 3, 0.7)
    # ('f', 1, 0.1) ('b', 2, 0.8) ('a', 3, 0.9)
    
        2
  •  0
  •   Иван Балван    2 年前

    使用列表理解(尽管李的回答更简洁):

    result=[[(i,k,j)  for i,k,j in zip(q,w,e)]
            for q,w,e in zip(A,numbers,frequency)]
    

    使用 for 回路:

    result=[]
    for q,w,e in zip(A,numbers,frequency):
        temp=[]
        for i,k,j in zip(q,w,e):
            temp.append((i,k,j))
        result.append(temp)