在Python中解压枚举的zip文件

3

我有三个列表想要用索引进行迭代。为此,我尝试使用enumerate(zip(x, y, z)),但在尝试解包时失败了。

[f.write('mVtet0.row({}) = Eigen::Vector3d({}, {}, {})\n'.format(i, x,y,z) for i, x, y, z in enumerate(zip(x,y,z))]

出现以下错误:ValueError: not enough values to unpack (expected 4, got 2)

我理解这个问题,enumerate函数创建一个包含索引和zip结果的元组。正确的解包方式是什么呢?


1
相关链接:如何在字典中枚举项目 - undefined
1个回答

7
你会获得一个 int 和一个 tuple。将 x、y、z 包含在方括号中,使其成为一个 tuple
[f.write('mVtet0.row({}) = Eigen::Vector3d({}, {}, {})\n'.format(i, x,y,z) 
 for i, (x, y, z) in enumerate(zip(x,y,z))]

就我个人而言,我认为这是列表推导的滥用,其唯一目的是使它成为一行代码。最好使用普通循环 - 这将更易读。同时最好使用f-strings。

for i, (x, y, z) in enumerate(zip(x,y,z)):
    f.write(f'mVtet0.row({i}) = Eigen::Vector3d({x}, {y}, {z})\n')

谢谢,那个方法很有效。感谢你关于f-string的提示。我不知道可以这样使用它们。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接