【问题标题】:Reusing Iterator Variables in Python For Loops在 Python For 循环中重用迭代器变量
【发布时间】:2015-01-19 19:01:41
【问题描述】:

在 Python v2.7.3 中,我可以像这样重用迭代器变量吗?

for i, name in enumerate(listOfNames):
   ...

然后再做:

for i, address in enumerate (addressList):
   ...

【问题讨论】:

  • 是的,你可以;除非你在另一个里面做一个,在这种情况下,小心行事

标签: python for-loop iteration enumerate


【解决方案1】:

什么迭代器变量?你没有重复使用任何东西。您分别调用了两次enumerate,因此它将生成两个单独的生成器。

你遇到麻烦的唯一方法就是你做了这样的事情

>>> listOfNames = ['bob', 'mike', 'steve']
>>> e = enumerate(listOfNames)

>>> for i, name in e:
        print(i)

0
1
2

>>> for i, name in e:
        print(i)

# prints nothing

请注意,我们将enumerate 调用的返回值分配给了变量e。如果您尝试对该变量进行两次迭代,那么第二次您将一无所获。在你的情况下,你不会遇到这个问题

【讨论】:

  • 'i' 是您可以分配的迭代器变量,不是吗?我可以不做:对于火腿,在 e 中命名?
  • 问题不是左边的变量(iham),是右边的变量。当您说for _ in enumerate(L) 时,您正在进行新的枚举调用,因此您将获得一个新的生成器。如果您说e = enumerate(L),则将返回的生成器分配给变量e。所以如果你说for _ in e:,你会使用那个生成器表达式,并且不能再次遍历它。
  • 我想我明白你在说什么。但是,我没有为 enumerate 调用分配变量,并且两个实例都在枚举单独的列表。我只谈论'我'。所以,我想我要问的是我可以将“i”用于枚举的两个实例吗?
  • 别担心变量i,它会在您的第二个for 循环中正确地采用新值。
【解决方案2】:

*>for i, name in enumerate(listOfNames): ...

对于 i,枚举中的地址 (listofAddress): ...

好的,关于你的情况,我想说,这是两个不同的 for 循环,结合了两个不同的迭代器,使用 enumerate() 方法。它们之间并没有真正的组合。

这是您在我的计算机上运行的案例的具体示例和屏幕截图:

如果您可以从 url 中查看此内容,请: https://i.stack.imgur.com/6U1CJ.png

从截图中可以看出,对于这两种情况: 第一个生成列表的名称及其索引 [i], 第二个是尝试做与 listofAddress 列表中相同的事情,并最终生成索引及其地址值。

因此您可以看到,即使对于名为 i 的“同名”变量,这也是来自两个列表的两个完全不同的结果;

但实际上它们是不一样的,因为它们都代表自己特定Lists中值的索引,一个是[listofNames]的索引,一个是[listofAddress]的索引,所以他们是不同的,对吧?

【讨论】:

猜你喜欢
  • 2016-03-15
  • 1970-01-01
  • 1970-01-01
  • 2021-02-19
  • 2022-01-23
  • 2015-04-21
  • 2020-05-04
  • 2016-08-03
  • 1970-01-01
相关资源
最近更新 更多