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

  • 本文关键字:得到 循环 for python python-3.8
  • 更新时间 :
  • 英文 :

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)

您需要压缩列表才能执行这样的 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)。两个元素不能解压缩为三个变量。所以不,它不能。这就是为什么您会收到一条错误消息"预期 3,得到 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):

最新更新