我知道你可以做嵌套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)
这两个循环是等价的吗?或者第二个循环与第一个循环有什么不同?
不,他们不是.
第二个是多重赋值的示例.如果指定给元组,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)