首页 > 解决方案 > 需要帮助修复 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)

我怎么不能打印这些值?这里的适当语法是什么?我找不到任何可以帮助我解决这个问题的东西。有人可以帮忙吗?将不胜感激!干杯

标签: python

解决方案


引发的错误来自内部循环:

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
    

推荐阅读