python - 需要帮助修复 ValueError:要解包的值太多(预期为 3)
问题描述
我是python的新手,所以也许这是一个简单的任务。但是,我在这里有点沮丧……事情是这样的:
我在 Pyhton 中定义了这个函数:
def arrays():
"""
returns to 2 sets of 3d coordinates
"""
x1 = [0.0, 0.0, 0.0, 0.0, 0.0]
y1 = [110.0,110.0,110.0,110.0,110.0]
z1 = [200.0,160.0,120.0,80.0 ,40.0 ]
x2 = [60.0, 60.0, 60.0, 60.0, 60.0 ]
y2 = [0.0,0.0,0.0,0.0,0.0]
z2 = [200.0,160.0,120.0,80.0 ,40.0 ]
well1 = [x1,y1,z1]
well2 = [x2,y2,z2]
return well1,well2
现在,在执行以下代码时,我得到
>>> well1,well2=arrays()
>>> for xs,ys,zs in [well1,well2]:
... print(xs)
... for i,j,k in [xs,ys,zs]:
... print(i,j,k)
...
[0.0, 0.0, 0.0, 0.0, 0.0]
Traceback (most recent call last):
File "<stdin>", line 3, in <module>
ValueError: too many values to unpack (expected 3)
我怎么不能打印这些值?这里的适当语法是什么?我找不到任何可以帮助我解决这个问题的东西。有人可以帮忙吗?将不胜感激!干杯
解决方案
引发的错误来自内部循环:
for i,j,k in [xs,ys,zs]:
问题是列表的每个元素都将被解包。你的每个元素 ( xs, ys,zs
) 里面都有 5 个元素。
在一个简单的示例中,在解包过程中,您应该在左侧和右侧具有相同数量的元素。这意味着如果您xs
有 5 个元素,则左侧应该有 5 个变量:
i,j,k,a,b = xs
因此,您的代码会引发异常,因为左侧只有 3 个变量。
解决方案
我想你想输出这样的东西:0.0, 110.0, 200.0
. 在这种情况下,您应该尝试使用zip 功能
for xs,ys,zs in well1,well2:
print(xs)
for i,j,k in zip(xs,ys,zs):
print(i,j,k)
[0.0, 0.0, 0.0, 0.0, 0.0]
0.0 110.0 200.0
0.0 110.0 160.0
0.0 110.0 120.0
0.0 110.0 80.0
0.0 110.0 40.0
[60.0, 60.0, 60.0, 60.0, 60.0]
60.0 0.0 200.0
60.0 0.0 160.0
60.0 0.0 120.0
60.0 0.0 80.0
60.0 0.0 40.0
推荐阅读
- r - 根据 Shiny R 中的单选按钮选择过滤列
- html - 如何传递图像下的文本,其中两列在引导程序上定义为图像,另一列用于文本?
- ios - 有人可以在发布图片时帮助我解决一个奇怪的 firebase 错误吗?
- chisel - makeSink 方法为外围设备制作 IO 的目的是什么
- python-3.x - 从文本条目返回值到其他类
- python - 为什么sk学习中的k-fold不打印数组值
- ros - GazeboRosControlPlugin 缺失
- x3dom - 如何在 X3DOM IndexedFaceSet 中允许 180 度角
- firebase - 如何在firestore中构建多个级别
- android - 使用 R8 混淆应用程序会导致超出 GC 开销限制