【问题标题】:Loop with a variable upper bound具有可变上限的循环
【发布时间】:2019-03-19 07:55:25
【问题描述】:

我想在 python 中创建一个 for 循环,其上界是列表的长度,其大小在循环内被修改。

像这样:

l = [1,2,3,4,5,6]
for i in range(len(l)):
    del l[i]

【问题讨论】:

  • @Dataholic:有什么不使用while 循环的特殊原因吗? while 循环为您提供所需的控制。
  • 是的,它与 while 循环一起工作,我只想知道 for 循环的上限是否在每次迭代中更新?
  • 如果您仍想使用 for 循环来执行此操作,您可以使用我在此处给出的答案的变体 stackoverflow.com/questions/54870055/…。该答案提供了一种重新设置可迭代的技术。您可以修改该技术以设置迭代的新限制。
  • for 循环的情况下要理解的重要事项是: (a) 表达式的计算只发生一次。 (b) 您“拦截”或“干预”的唯一机会是如果在开始时实现for 循环使用的迭代器每次迭代。 (我在那篇文章中的回答是说明如何重新设置或重新初始化自定义迭代器以再次从头开始迭代)

标签: python python-3.x


【解决方案1】:
l = [1,2,3,4,5,6]
for i in range(len(l)):
    del l[0]

您的代码每次迭代都会使列表 1 元素变短。 当您到达元素 4 时,您的代码会尝试删除只有 3 个元素长的列表的第四个元素。这会导致越界错误。

编辑 如果您的上限是恒定的,请回答您的问题:是的。

from random import randint
def upper_bound():
    print("Generate Range")
    return randint(0,9)

for i in range(upper_bound()):
    print("Iteration")
    pass

那段代码打印出来:

Generate Range
Iteration
Iteration
...
Iteration

【讨论】:

  • 是上界常数,还是不断更新?
  • 我确实更新了我的答案。下次试着告诉我们你想知道什么,你试图达到什么结果,你预期会发生什么以及意外发生了什么。帮助反对反对票。
猜你喜欢
  • 2013-03-21
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
  • 1970-01-01
  • 2018-09-09
  • 2021-06-23
  • 1970-01-01
相关资源
最近更新 更多