Jar*_*ett 5 python iteration iterator loops for-loop
让我从通用的开始,我是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
Run Code Online (Sandbox Code Playgroud)
在您的代码中,您使用该enumerate()功能.您可以想象它执行以下操作:
>>> print enumerate("a","b","c")
>>> [(0,"a"),(1,"b"),(2,"c")]
Run Code Online (Sandbox Code Playgroud)
(这不完全正确,但足够接近.)
enumerate()将元素列表转换为元组列表*,其中每个元组由元素索引和元素组成.元组类似于列表.
*实际上它返回一个迭代器,而不是一个列表,但这不应该打扰你太多.
但两个迭代变量如何工作?
让我用几个例子来说明这一点.
在第一个示例中,我们遍历整数列表中的每个元素.
simple_list = [1,2,3,4]
for x in simple_list:
print x
Run Code Online (Sandbox Code Playgroud)
但是我们也可以遍历整数元组列表中的每个元素:
tuple_list = [(1,5),(2,6),(3,7),(4,8)]
for x, y in tuple_list:
print x, y
print x+y
Run Code Online (Sandbox Code Playgroud)
这里,列表的每个元素都是两个整数的元组.当我们编写时for tup in tuple_list,然后tup在每次迭代中填充列表中的一个整数元组.
现在,因为Python很棒,我们可以通过编写(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
Run Code Online (Sandbox Code Playgroud)
所有这一切都有效.或者应该工作(没有运行代码).
而且当然,
tuple_list = [(1,5),(2,6),(3,7),(4,8)]
for tuple in tuple_list:
print tuple
Run Code Online (Sandbox Code Playgroud)
也有效.