我想用索引迭代三个列表。为此,我尝试使用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))]
Run Code Online (Sandbox Code Playgroud)
给出以下错误:ValueError: not enough values to unpack (expected 4, got 2)
我理解这个问题, enumerate 创建一个带有索引和 zip 结果的元组。打开所有东西的正确方法是什么?
你得到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))]
Run Code Online (Sandbox Code Playgroud)
也就是说,在我看来,这是对列表理解的滥用,其唯一目的是使其成为一句台词。最好使用常规循环 - 它将更具可读性。并且最好使用 f 弦。
for i, (x, y, z) in enumerate(zip(x,y,z)):
f.write(f'mVtet0.row({i}) = Eigen::Vector3d({x}, {y}, {z})\n')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
771 次 |
| 最近记录: |