【问题标题】:Changing the range of a for loop based on the length of a list for Python根据 Python 列表的长度更改 for 循环的范围
【发布时间】:2018-11-06 04:37:33
【问题描述】:

如果我有一个清单:

list = [1, 2, 3, 4, 5]

还有一个 for 循环:

for i in range(len(list)):
   if list[i] > 3:
      list.clear()
      list.append(1)
print(list)

现在,这些只是显示我遇到的问题的示例,也就是说,我想根据列表的长度对其进行迭代。如果我满足某个条件,我想修改列表。但是,然后我希望 for 循环根据新列表的长度运行。这样做的主要原因以及我为什么包含 list.clear() 是因为如果列表与定义的列表完全不同,我正在检查的条件也将适用于列表中从 list[ 开始的每个元素0]。

所以基本上,我希望 for 循环根据给定 List 的长度运行,然后我希望它根据新 List 的长度再次运行,同时检查第一个列表的每次迭代和第二个以此类推,直到我想要它打破。

希望我的问题足够清楚。由于我是初学者,因此欢迎任何相当简单的建议。如果我做错了什么,也请指出来。

谢谢。

【问题讨论】:

    标签: python for-loop local-variables python-3.7


    【解决方案1】:

    不建议在迭代列表时对其进行修改。

    您需要一种从头开始重新启动 for 循环的方法,您可以通过将其包装在 while 循环中来做到这一点:

    flag = True
    while flag:
        for i in range(len(items)):
            if items[i] > 3:
                items.clear()
                items.append(1)
                # break out of the for loop and start over, because flag is still True
                break
            else if final_condition:
                # set flag to false and break out of for loop
                flag = False
                break
    

    【讨论】:

    • 天哪,就这么简单。非常感谢!我想即使我这样做了,我的 for 循环在我的 while 循环中的范围仍然会保持不变,因为在 while 循环之外它不会改变。谢谢!
    【解决方案2】:

    你为什么不这样写:

    i = 0
    while True:
        if i < len(list):
           if list[i] > 3:
              list.clear()
              list.append(1)
              i += 1
        else:
           break
    
    print(list)
    

    希望我能很好地理解你。

    【讨论】:

    • for i in list_range: 只评估一次。重新分配 list_range 无效。
    • 糟糕。正确的!我提供了另一种可能的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2018-03-09
    • 1970-01-01
    • 2023-01-25
    • 1970-01-01
    • 2022-12-16
    • 2020-07-23
    • 1970-01-01
    • 2019-01-07
    相关资源
    最近更新 更多