<python> for循环中的两个迭代变量

时间:2015-12-09 22:32:08

标签: python loops for-loop iterator iteration

让我开始使用通用的我是Python的初学者。 嗨,我是Python的初学者,所以请尽量与简单的英语保持一致:)

我继续遇到这些for循环,其中for循环中有两个迭代变量。这对我来说非常困惑,因为我只是围绕着for循环的基本概念。那就是你的迭代变量一次一行地通过for循环运行(在大多数情况下)。那么两个迭代变量的作用是什么呢?我有一些猜测,但我想要正确的答案,把我的想法放在正确的方向。

有人会输入for循环的读取方式(用口语来说)并解释究竟发生了什么。

>>> elements = ('foo', 'bar', 'baz')
>>> for elem in elements:
...     print elem
... 
foo
bar
baz
>>> for count, elem in enumerate(elements):
...     print count, elem
... 
0 foo
1 bar
2 baz

1 个答案:

答案 0 :(得分:9)

在您的代码中,您使用enumerate()函数。您可以想象它会执行以下操作:

>>> print enumerate("a","b","c")
>>> [(0,"a"),(1,"b"),(2,"c")]

(这不完全正确,但它足够接近。)

enumerate()将元素列表转换为元组列表*,其中每个元组由元素索引和元素组成。元组类似于列表。

*实际上它返回一个迭代器,而不是一个列表,但这不应该让你感到烦恼。

但两个迭代变量如何工作?

让我用几个例子来说明这一点。

在第一个例子中,我们迭代整数列表中的每个元素。

simple_list = [1,2,3,4]
for x in simple_list:
    print x

但是我们也可以迭代整数元组列表中的每个元素:

tuple_list = [(1,5),(2,6),(3,7),(4,8)]
for x, y in tuple_list:
    print x, y
    print x+y

这里,列表的每个元素都是两个整数的元组。当我们写for tup in tuple_list时,每次迭代都会填充tup,并且列表中有一个整数元组。

现在,因为Python非常棒,我们可以&#34;赶上&#34;通过编写(x,y)(或x,y(相同)代替tup,将两个整数的元组转换为两个不同的整数变量 这有意义吗?

类似地,我们可以迭代3元组:

tuple_list = [(1,5,10),(2,6,11),(3,7,12),(4,8,69)]
for x, y, z in tuple_list:
    print x, y, z
    print x+y-z

所有这一切都有效。或者应该工作(避免运行代码)。

当然,

tuple_list = [(1,5),(2,6),(3,7),(4,8)]
for tuple in tuple_list:
    print tuple

也有效。