【问题标题】:Nested for loop in python not workin with range(0, i+1) but working with range(0, i)python中的嵌套for循环不使用范围(0,i + 1)但使用范围(0,i)
【发布时间】:2021-12-28 09:15:31
【问题描述】:

这段代码运行良好:

list2 = [3, 3, 3]
print(list2)
for i in list2 :
    for j in range(0, i)  :
        list2.append(j)
print(list2)

此代码未运行或可能需要很长时间:

list2 = [3, 3, 3]
print(list2)
for i in list2 :
    for j in range(0, i + 1)  :
        list2.append(j)
print(list2)

【问题讨论】:

  • 调试你的代码。在list2.append(j) 之后添加打印语句。会发生什么?
  • “不工作”是什么意思?会发生什么?当它“工作”时会发生什么?您永远不应该从当前迭代的列表中追加或删除
  • 另外 - 你的 4 个输入不是必需的,使用固定值:list2 = [2,3,4] - n 根本不使用,result 也是如此。阅读并关注minimal reproducible example
  • 我编辑了问题以添加具体输入...请不要'举一个需要用户输入的示例,除非用户输入是问题的相关部分。

标签: python for-loop nested-for-loop


【解决方案1】:

问题是:for i in list2 还对 list2.append(j) 添加的数字进行迭代


  1. 在第一个代码中,内部循环仅添加小于 list2 中已有数字的数字,因为范围结束边界是独占的,如果 list2 = [3,3,3] 则添加 0,1,2,然后0,1,然后是 0,然后 range 不会产生任何结果

  2. 但在第二种情况下,范围现在也会生成到给定的边界,所以它是一个无限循环,因为

    i=0
    range(0, 0+1) => [0] added in `list2`
    iterate on the added `0`
    
    i=0
    range(0, 0+1) => [0] added in `list2`
    iterate on the added `0`
    ...
    

如果您不想迭代新数字,请复制一份

list2 = [3, 3, 3]
for i in list(list2):
    for j in range(0, i + 1):
        list2.append(j)

# [3, 3, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3]

注意

每个值都会生成2**x 值,初始列表包含多个项目,将它们的2次方相加

from random import choice
init = [choice(range(10)), choice(range(10)), choice(range(10))]
list2 = list(init)
for i in list2:
    for j in range(i):
        list2.append(j)
assert len(list2) == sum(2 ** x for x in init)

【讨论】:

  • 你从我的键盘中取出了单词。循环后的result = [] 声明也很奇怪。 OP 是否可以追加 result 而不是 list2
  • 这很有趣。 + 版本的问题是它总是会添加至少一个,因此它会继续运行。但是当它不包括在内时,我不确定如何分析它。也许我错过了一些东西。它停止是因为最终添加了足够多的零,迭代可以“赶上”并终止。但这会一直发生吗?不能把我的头绕过去。该睡觉了……
  • @juanpa.arrivillaga 第一个版本增加了许多数字,但总是更小,所以它肯定会结束,但可能会持续很长时间
  • 嗯嗯好的。不,我现在明白了。它总是会最终结束,因为它总是会添加一系列小于一个的数字。必须在循环结束时添加 input()print(list2)
  • @juanpa.arrivillaga 每个值都会产生2**x,所以如果你在初始列表中有多个值,总之,我已经编辑了我的帖子以添加它
猜你喜欢
  • 1970-01-01
  • 2022-11-22
  • 2017-04-10
  • 1970-01-01
  • 2018-12-11
  • 2011-06-23
  • 2017-07-29
  • 2021-11-25
  • 2016-03-18
相关资源
最近更新 更多