【问题标题】:<Python> Two iterating variables in a for loop [duplicate]<Python> for 循环中的两个迭代变量[重复]
【发布时间】:2016-03-15 09:40:15
【问题描述】:

让我从泛型开始,我是 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

【问题讨论】:

  • 简答:for a, b in x: ...body... 等价于for tmp in x: a = tmp[0]; b = tmp[1]; ...body...

标签: python loops for-loop iterator iteration


【解决方案1】:

在您的代码中,您使用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

但我们也可以遍历 tuples of 整数列表中的每个元素:

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 太棒了,我们可以通过写(x,y)(或x,y,相同)代替tup,将两个整数的元组“捕获”为两个不同的整数变量 这有意义吗?

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

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

也可以。

【讨论】:

  • 这对我来说真的很有意义!我会加分,但我的声望点还不到 15。
  • 这个语法怎么样:arr = [[1, 2],[3, 4], [5]]; for i, v in arr: print (i, v)?看起来它使数组数组变平......
猜你喜欢
  • 2021-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多