首页 > 解决方案 > 将列表元素转换为另一个列表的列表列表

问题描述

感谢您的帮助,这是关于列表列表的问题。
给定列表:\

g = [[] for _ in range(5)]
a = [1,2,3,4]
b = [37100,3710,371,37,0]

我需要结果g = [[37100,1],[3710,2],[371,3],[37,4],[0]],我尝试使用嵌套的 for 循环,但这不起作用,下面是我的代码:


    g = [[] for _ in range(5)]
    a=[1,2,3,4]
    b = [37100,3710,371,37,0]
    for i in range(len(b)):
      g[i].append(b[i])
    for i in g[0:5]:
      for b in range(len(a)):
        lst = []
        lst.append(a[b])
        i.append(lst)
    print(g)

但是,我的结果是[[37100, [4]], [3710, [4]], [371, [4]], [37, [4]], [0, [4]]] 有人知道如何解决吗?

标签: pythonlist

解决方案


您可以使用itertools.zip_longest

from itertools import zip_longest
a = [1,2,3,4]
b = [37100,3710,371,37,0]

c = [1,2,3,4,5,6]
d = [1,2,3,4,5,6,7]

res = [[ii for ii in i if ii is not None] for i in zip_longest(b, a, c)]
print(res)

res = [[ii for ii in i if ii is not None] for i in zip_longest(b, a, c, d)]
print(res)

输出

[[37100, 1, 1], [3710, 2, 2], [371, 3, 3], [37, 4, 4], [0, 5], [6]]
[[37100, 1, 1, 1], [3710, 2, 2, 2], [371, 3, 3, 3], [37, 4, 4, 4], [0, 5, 5], [6, 6], [7]]

根据评论编辑:

from itertools import repeat
a = [1,2,3,4]
b = [371] * 100
c = [11,12,13,14]
d = [111,222,333,444]
res = [list(j) for i in zip(repeat(b), (a, c, d)) for j in zip(*i)]

print(res)

推荐阅读