You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python嵌套for循环莫名中断,执行计数不符问题求助

循环计数异常原因分析

问题场景

运行以下Python代码时,循环计数变量i的输出结果为42598:

import numpy as np
all_sets = []
working_sets = []

numbers = np.arange(10)
operators = ['+', '-', '*', '/']

i = 0
expression = ['', '', '', '', '', '', '']
for n1 in numbers:
    expression[0] = str(n1)
    for o1 in operators:
        expression[1] = o1
        for n2 in numbers:
            expression[2] = str(n2)
            for o2 in operators:
                expression[3] = o2
                for n3 in numbers:
                    expression[4] = str(n3)
                    for o3 in operators:
                        expression[5] = o3
                        for n4 in numbers:
                            expression[6] = str(n4)
                            i += 1

                            # get all sets for comparison
                            numbers = sorted([expression[0], expression[2], expression[4], expression[6]])
                            if not (numbers in all_sets):
                                all_sets.append(numbers)

print(i)

但注释掉以下代码段后:

# get all sets for comparison
numbers = sorted([expression[0], expression[2], expression[4], expression[6]])
if not (numbers in all_sets):
    all_sets.append(numbers)

i的输出结果变为640000。请问是什么原因导致循环提前中断?

核心原因

问题出在循环内部重写了外层循环依赖的numbers变量:

  • 一开始numbers是numpy.arange(10)生成的数组[0,1,2,...,9],是外层多个for循环的迭代对象。
  • 当执行到numbers = sorted([expression[0], expression[2], expression[4], expression[6]])时,numbers被替换成了一个仅包含4个字符串元素的列表(比如第一次循环后会变成['0','0','0','0'])。
  • 后续的for循环(比如for n3 in numbers、for n4 in numbers)会迭代这个新的短列表,而不是原来的10元素数组,直接导致循环次数大幅减少,最终i的计数远低于预期值。

举个直观的例子:原本for n3 in numbers要循环10次,现在因为numbers被改成了长度为4的列表,只循环4次;同理for n4 in numbers也从10次变成4次,整个嵌套循环的总次数急剧下降,所以i的结果变成了42598。

而注释掉那段代码后,numbers始终保持最初的10元素数组,所有嵌套循环都按预期执行:10(n1)×4(o1)×10(n2)×4(o2)×10(n3)×4(o3)×10(n4)= 640000,和输出结果完全一致。

内容的提问来源于stack exchange,提问作者Akut Luna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 03:50:17