循环python的多变量

Hac*_*kxx 1 python for-loop

我知道你可以做嵌套for循环,例如:

for ch in a:
    for ch2 in ch:
        print(ch2)
Run Code Online (Sandbox Code Playgroud)

但是,我已经看到了这样的循环:

for ch, ch2 in a:
    # blah blah
Run Code Online (Sandbox Code Playgroud)

这两个循环是等价的吗?或者第二个循环与第一个循环有什么不同?

Two*_*ist 5

不,他们不是.

第二个是多重赋值的示例.如果指定给元组,Python会将可迭代的值解压缩到您给出的名称中.

第二个循环相当于:

for seq in a:
    ch = seq[0]
    ch2 = seq[1]
    # blah blah
Run Code Online (Sandbox Code Playgroud)

正如@Kasramvd在对您的问题的评论中指出的那样,只有a具有正确数量的项目的序列才有效.否则,Python会引发一个ValueError.


编辑以解决dict迭代问题(如评论中所示):

当你遍历一个Python dict使用正常for x in y的语法,x关键相关的每个迭代.

for x in y:   # y is a dict
    y[x]      # this retrieves the value because x has the key
Run Code Online (Sandbox Code Playgroud)

您正在谈论的循环类型实现如下:

for key, val in y.items():
    print(key, 'is the key')
    print('y[key] is', val)
Run Code Online (Sandbox Code Playgroud)

这仍然是如上所述的相同类型的解包,因为dict.items它为您提供了与内容相对应的元组列表dict.那是:

d = {'a': 1, 'b': 2}
print(d.items())    # [('a', 1), ('b', 2)]
Run Code Online (Sandbox Code Playgroud)