python - 将列表元素转换为另一个列表的列表列表
问题描述
感谢您的帮助,这是关于列表列表的问题。
给定列表:\
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]]]
有人知道如何解决吗?
解决方案
您可以使用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)
推荐阅读
- ethereum - 我们可以在不同的区块链上部署相同的 ERC20 代币吗?
- c# - 无法解析符号
- php - PHPUnit Laravel 没有运行下一个测试用例
- tomcat - Tomcat (9.0.48)不是从 TLSv1.3 开始,并且 server.xml 中的显式密码:SSL 例程:SSL_CTX_set_cipher_list:JDK11 应用程序没有密码匹配
- python - Selenium 脚本捕获 100 个项目中的前几个项目
- google-cloud-platform - Google Keep API - 无法添加范围
- amazon-web-services - 如何在 Amazon S3 上存储 bacula(社区版)备份?
- css - 当定义为百分比时,我需要使用宽度和最小宽度进行说明
- contentful - Adding installation parameters to a contentful App
- terraform - 动态生成和引用 Terraform 块