Python遍历多个列表:ValueError: too many values to unpack (expected 2)

项目场景:

在进行列表遍历的时候,希望同时遍历多个列表。


问题描述:

      在使用循环遍历两个列表时,希望x,y各自获取到数组a,b里全部的元素,却产生了意料之外的报错

ValueError: too many values to unpack (expected 2)

让我们来看看代码

a = [1,2,3]
b = [5,6,7]

for x,y in a,b:
    print("x:",x,"y:",y)

'''
ValueError: too many values to unpack (expected 2)
'''

解决方案:

      观察报错,说给予的值太多了,期望的是两个。而我们哪里有超过两个的值呢?肯定不可能是x,y这边出的问题,那就只有可能是a,b里的值太多了。尝试去调试一下

a = [1,2]
b = [5,6]

for x,y in a,b:
    print("x:",x,"y:",y)

      不出所料跑通了,但是问题又出现了,他的遍历方式好像与我们期望的不同,他好像是一个纵向的遍历。

x: 1 y: 2
x: 5 y: 6

Process finished with exit code 0

      如果确实是纵向的遍历那问题就能说得通了,如果列表的列数多于变量数了,那多的那几列就没有变量去遍历了,那也满足了所谓的too many values to unpack,可这毕竟只是猜想,让我们证实一下。

#第一步:通过增加遍历的变量来证明
a = [1,2]
b = [5,6]

for x,y,z in a,b:
    print("x:",x,"y:",y)
#报错:
#ValueError: not enough values to unpack (expected 3, got 2)
#符合猜想
#第二步:扩充被遍历的列表
a = [1,2,3]
b = [5,6,7]
c = [8,9,10]
for x,y,z in a,b,c:
    print("x:",x,"y:",y,"z:",z)
    
'''
输出:
x: 1 y: 2 z: 3
x: 5 y: 6 z: 7
x: 8 y: 9 z: 10

Process finished with exit code 0
符合猜想
'''

思考

      虽然我们通过实验搞清了原理,但只是解决了报错,真正的想实现我们预想的迭代方式该怎么做呢?
      其实python里面的字典键值对的形式就能很好的解决这个问题。

a = [1,2,3,4]
b = [5,6,7,8]

t = dict(zip(a,b))
for x,y in t.items():
    print("x:",x,"y:",y)

'''
x: 1 y: 5
x: 2 y: 6
x: 3 y: 7
x: 4 y: 8

Process finished with exit code 0
'''

  • 62
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
yolox报错"ValueError: too many values to unpack (expected 2)"是因为在代码的某一行中尝试解包的变量数量与预期不符。根据引用的错误信息,可以看出是在调用一个函数时出现的错误。该函数实际返回了三个值,而调用该函数的地方只使用了一个变量去接受返回值,导致变量数量不匹配的错误。 要解决这个问题,你可以通过修改代码来确保接受返回值的变量数量与函数返回的值的数量相匹配。你需要检查调用该函数的地方,并确保有足够的变量去接受返回值。在这种情况下,你可能需要使用一个元组或列表来接受返回的多个值。 例如,你可以将函数返回的多个值存储在一个元组中,然后使用相应数量的变量去解包这个元组。这样,就可以避免"ValueError: too many values to unpack"的错误。 请注意,具体的修改方法可能因你的代码结构和逻辑而有所不同。建议你仔细检查报错的代码行并进行相应的修改。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [关于 Python opencv 使用中的 ValueError: too many values to unpack](https://download.csdn.net/download/weixin_38661650/13995213)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [解决Dataloader报错:ValueError: too many values to unpack (expected 2)](https://blog.csdn.net/hjtsml_future/article/details/121783567)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [python遍历输出字典时报错:ValueError: too many values to unpack (expected 2)](https://blog.csdn.net/m0_46151559/article/details/120662974)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Foxerity

看心情就好啦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值