循环python的多变量
我知道可以对循环进行嵌套,例如:循环python的多变量,python,for-loop,Python,For Loop,我知道可以对循环进行嵌套,例如: for ch in a: for ch2 in ch: print(ch2) 但是,我看到过类似这样的循环: for ch, ch2 in a: # blah blah 这两个循环相等吗?或者第二个循环是否与第一个循环有所不同?不,它们不是 第二个是一个例子。如果指定一个元组,Python会将一个iterable的值解压到您指定的名称中 第二个循环相当于: for seq in a: ch = seq[0] c
for ch in a:
for ch2 in ch:
print(ch2)
但是,我看到过类似这样的循环:
for ch, ch2 in a:
# blah blah
这两个循环相等吗?或者第二个循环是否与第一个循环有所不同?不,它们不是
第二个是一个例子。如果指定一个元组,Python会将一个iterable的值解压到您指定的名称中
第二个循环相当于:
for seq in a:
ch = seq[0]
ch2 = seq[1]
# blah blah
正如@Kasramvd在对您的问题的评论中指出的那样,只有当a
是一个项目数正确的序列时,这种方法才有效。否则,Python将引发ValueError
编辑地址
dict
迭代(如注释中所示):
当您在Pythondict
上使用正常的for x in y
语法进行迭代时,x
是与每次迭代相关的键
for x in y: # y is a dict
y[x] # this retrieves the value because x has the key
您所讨论的循环类型实现如下:
for key, val in y.items():
print(key, 'is the key')
print('y[key] is', val)
这仍然是如上所述的同一种解包,因为dict.items
为您提供了与dict
内容相对应的元组列表。即:
d = {'a': 1, 'b': 2}
print(d.items()) # [('a', 1), ('b', 2)]
不,他们不是
第二个是一个例子。如果指定一个元组,Python会将一个iterable的值解压到您指定的名称中
第二个循环相当于:
for seq in a:
ch = seq[0]
ch2 = seq[1]
# blah blah
正如@Kasramvd在对您的问题的评论中指出的那样,只有当a
是一个项目数正确的序列时,这种方法才有效。否则,Python将引发ValueError
编辑地址
dict
迭代(如注释中所示):
当您在Pythondict
上使用正常的for x in y
语法进行迭代时,x
是与每次迭代相关的键
for x in y: # y is a dict
y[x] # this retrieves the value because x has the key
您所讨论的循环类型实现如下:
for key, val in y.items():
print(key, 'is the key')
print('y[key] is', val)
这仍然是如上所述的同一种解包,因为dict.items
为您提供了与dict
内容相对应的元组列表。即:
d = {'a': 1, 'b': 2}
print(d.items()) # [('a', 1), ('b', 2)]
它们不一样。第一个循环将给出iterable项的乘积,因为第二个循环只是一个多赋值循环,仅当iterable
a
具有双重项时,该循环才会在iterablea
上迭代。它们不一样。第一个循环将给出iterable项的乘积,因为第二个循环只是多赋值循环迭代iterablea
仅在a
具有双工项时有效。因此,当您执行循环时,ch是否从seq[0]向前移动,而seq[1]是否从[1]向前移动?我正在使用一本字典,所以我对解包的交互作用有点困惑;这里有两个赋值变量会表示键及其值吗?@Hackxx更新了我的答案,以解决dict
迭代,以及上面的概念如何融入其中。OHHH好的,因为dict.items解压成一个双工元素元组,所以多重赋值的目标是第0个和第1个元素,对吗?@Hackxx是的,准确地说。如果你像那样迭代x in y.items()
,x
每次都是一个元组,但是由于你提供了两个赋值目标,Python为你实现并解压了它,所以你有了单独的元素。我明白了!!因此,如果(出于某种未知原因)要使用for x in y.items()循环,那么最终必须将所有元素都解元组(假设您需要单个元素)?因此,在执行循环时,ch是否从seq[0]向前移动,而seq[1]从[1]向前移动?我正在使用一本字典,所以我对解包的交互作用有点困惑;这里有两个赋值变量会表示键及其值吗?@Hackxx更新了我的答案,以解决dict
迭代,以及上面的概念如何融入其中。OHHH好的,因为dict.items解压成一个双工元素元组,所以多重赋值的目标是第0个和第1个元素,对吗?@Hackxx是的,准确地说。如果你像那样迭代x in y.items()
,x
每次都是一个元组,但是由于你提供了两个赋值目标,Python为你实现并解压了它,所以你有了单独的元素。我明白了!!因此,如果(出于未知原因)要使用for x in y.items()循环,那么最终必须取消对所有元素的元组,假设您需要单个元素?