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):
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):