Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
循环python的多变量_Python_For Loop - Fatal编程技术网

循环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
迭代(如注释中所示):

当您在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
您所讨论的循环类型实现如下:

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
迭代(如注释中所示):

当您在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
您所讨论的循环类型实现如下:

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
具有双重项时,该循环才会在iterable
a
上迭代。它们不一样。第一个循环将给出iterable项的乘积,因为第二个循环只是多赋值循环迭代iterable
a
仅在
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()循环,那么最终必须取消对所有元素的元组,假设您需要单个元素?