【问题标题】:How to run a for loop with variable range?如何运行具有可变范围的for循环?
【发布时间】:2020-05-10 07:37:17
【问题描述】:

我想要一个 Python 程序,比如——

for i in range(r):
    if (i==2):
        #change r in some way

在 if 语句中修改后,它将为新范围 r 运行循环。

即使我在 if 语句之后更改 r,for 循环也会针对我给出的初始 r 运行。这一定会发生,因为 range(r) 在第一行本身的 for 语句中得到固定,并且不受稍后更改 r。

有没有“简单的方法”绕过这个?

“简单”是指我不想添加一个计数器来计算循环已经运行了多少次,以及在更改(特别是增加)r 后需要再次运行多少次,或者通过替换 for 循环带有一个while循环。

【问题讨论】:

  • 使用 while 循环和手动计数器是他要走的路。你不能改变r
  • 记住:在 Python 中参数是按值传递的(参见“对象共享调用”)。函数被赋予 r 的 当前值(即 r 立即作为表达式求值),否则与用作参数的变量没有关联。
  • 不像其他人所说的那样使用while循环,我认为很可能有更好的选择来解决这个问题。您能否通过向我们展示您想要实现的目标来扩展您的帖子?也许python索引已经可以帮助你? >>> x = [1,2,3] >>> x[2] = 5 >>> x [1, 2, 5]
  • 如果想为这样的一般请求编写一些复杂的代码,而不是简单的计数器,它可能看起来像这样:r = 3; g = my_generator(r);对于 i 在 g 中;如果 i == 2:g.set_max(42)。 my_generator 使用属性来维护状态。同样,为了巩固一点,r 从未传递给 my_generator 函数/构造函数:值 3 是。
  • @Dremet 我正在为没有重复的随机游走问题编写代码,所以我需要检查之前是否访问过新点。如果当时访问过,我们需要拒绝该点对吗?所以那一步从未发生过,但最初我以固定数量的步数开始,所以每次我不使用一个点时,我都不希望我增加。添加主代码可能会惹恼一些用户,因为它既不匹配标题,也不匹配标签(它将成为科学计算问题)。并且还可能导致问题以“离题”而结束。

标签: python python-3.x loops for-loop if-statement


【解决方案1】:

当你说:

for i in range(r):

range(r) 创建一个 range 对象。它仅在最初设置循环时执行一次。因此,您在循环内对r 所做的任何更改都不会影响循环的性能,因为它是range 对象决定了迭代次数(它恰好是用r 初始化的)。

经验法则:如果您提前知道需要多少次迭代,请使用for 循环。如果您不知道需要多少次迭代,请使用while 循环。

【讨论】:

  • 谢谢,但我已经写了问题中的几乎所有内容,你在这个答案中告诉过。
  • 我想我真的应该使用 while 语句。
【解决方案2】:

我不相信这是可能的。但是,使用 while 循环和手动计数器本身就是一种非常简单的方法。

代码将如下所示:

i = 0
while i < r:
    if i == 2:
        # Change r in some way

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    相关资源
    最近更新 更多