for 循环 - 没有足够的值来解压(预期 3,得到 2)但我提供了 3

for loop - Not enough values to unpack (expected 3, got 2) but I am providing it with 3

def func(a,b,c):
    for x,y,z in a,b,c:
        pass

func(((1,2),(1,3)),((1,4),(1,5)),(1,2))

我希望 x,y,z 获得值 (1,2)(1,4)1。相反,我收到一个错误:

ValueError: not enough values to unpack (expected 3, got 2)

您需要 zip 列表才能执行这样的 for 循环,而无需遍历传递给 func() 的参数:

def func(a,b,c):
    for x,y,z in zip(a,b,c):
        pass

func(((1,2),(1,3)),((1,4),(1,5)),(1,2))

否则,for 循环将遍历传递给 func 的每个参数。

a,b,c 是一个带有隐式括号的元组。与(a,b,c).

相同
for x,y,z in (a,b,c):

此循环不会将 a 解包为 x,将 b 解包为 y,将 c 解包为 z。相反,它具有三个迭代。它尝试将 a 解压缩为 x,y,z 的第一次迭代。下一次迭代解包 b,第三次解包 c.

a可以解包成x,y,z吗?那么,a 是一个包含两个元素的元组:(1,2)(1,3)。两个元素不能解包为三个变量。所以不,它不能。这就是您收到错误消息 "expected 3, got 2".

的原因

我不知道你打算用这段代码做什么。您也许可以通过将 (a,b,c) 包装在一个额外的可迭代对象中来修复它。以下之一:

for x,y,z in ((a,b,c),):
for x,y,z in [(a,b,c)]:

或者,如果您想要三个元组中的每一个元素,请使用 zip 依次遍历所有三个元组:

for x,y,z in zip(a,b,c):