python的for循环同时遍历两个list?

b = [1, 2, 3]
c = [(10, 20), (30, 40), (50, 60)]

for i, j in b, c:
    print(i, j)
ValueError: too many values to unpack (expected 2)
b = [1, 2]
c = [(10, 20), (30, 40)]

for i, j in b, c:
    print(j)
2
(30, 40)

这输出到底是怎么回事啊, 不能这么遍历吗...

为什么我印象中有这种用法呢...

dict.items() 就能用:

for key, value in x.items()

遍历..

阅读 13k
2 个回答

當你寫出 b, c 的時候, Python 會以為你要製造一個 tuple, 所以:

for i, j in b, c:

相當於:

for i, j in (b, c):

b = [1, 2, 3]c = [(10, 20), (30, 40), (50, 60)] 時就相當於:

for i, j in ([1, 2, 3], [(10, 20), (30, 40), (50, 60)]):

所以第一個迭代到的對象是 [1, 2, 3], 而這個 list 有三個元素自然是無法拆解成兩個變量 ij 的。

但如果 b = [1, 2]c = [(10, 20), (30, 40)],則相當於:

for i, j in ([1, 2], [(10, 20), (30, 40)]):

第一個迭代到的對象是 [1, 2], 該 list 有兩個元素恰能 unpack 為 ij,所以下面的語法是能夠順利運行的。

回到你的需求,若要平行迭代兩個 list,你需要的是 zipzip_longest,你可以參考 @Python爬虫分享 的範例。


我回答過的問題: Python-QA

好像没有这种用发吧,哈哈。

但是我记得有这种用法:

>>> a= 1
>>> b= 2
>>> a, b = b, a
>>> print(a, b)
2 1

同时遍历的话,不知道下面这种能否解决?供参考:

b = [1, 2, 3]
c = [(10, 20), (30, 40), (50, 60)]
for i in zip(b, c):
print(i)
   
>>>(1, (10, 20))
   (2, (30, 40))
   (3, (50, 60))
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题