Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中停止对列表的嵌套循环迭代_Python_Loops_Nested_Break - Fatal编程技术网

如何在Python中停止对列表的嵌套循环迭代

如何在Python中停止对列表的嵌套循环迭代,python,loops,nested,break,Python,Loops,Nested,Break,我试图建立一个基于两个范围和一个列表的“人口”列表。我创建的嵌套循环不会停止,即使我指定了它应该中断的位置(我检查了循环中使用的列表的长度,该长度等于303)。因此,输出是无限的:在打印v=2,J=100(最大需要量)的总体值后,返回显示v=0,J=0的总体值。我怎样才能解决这个问题?代码如下: from scipy.optimize import minimize_scalar import math import itertools we=268.64 wexe=0.814 weye=-0

我试图建立一个基于两个范围和一个列表的“人口”列表。我创建的嵌套循环不会停止,即使我指定了它应该中断的位置(我检查了循环中使用的列表的长度,该长度等于303)。因此,输出是无限的:在打印v=2,J=100(最大需要量)的总体值后,返回显示v=0,J=0的总体值。我怎样才能解决这个问题?代码如下:

from scipy.optimize import minimize_scalar
import math
import itertools

we=268.64
wexe=0.814
weye=-0.0017
Be=0.0568325
ae=0.0001969
ge=-0.00000047
De=1.02E-8
kb=1.38065E-23

energy_groundJ=[]
def energyJ (v,J):
    E = we*(v+0.5) + wexe*(v+0.5)**2 + weye*(v+0.5)**3 + Be*(J*(J+1)) - ae*(v+0.5)*(J*(J+1)) - De*(J*(J+1)) + ge*(J*(J+1))*(v+0.5)**2
    E_J=E*1.986E-23
    return E_J
for v in [0,1,2]:
    for J in range(0,101):
        E_J=energyJ(v,J)
        energy_groundJ.append(E_J) 

Population=[]
def population_ground():
    P=(2*J+1)*math.exp(-i/(kb*295))
    return P
for i in energy_groundJ:
    for v in [0,1,2]:
        for J in range(0,101):
            if i==303:
                break
            P=population_ground()
            Population.append(P)
            print("population at v = "+str(v)+" and J ="+str(J)+"  = "+str(P))

break
仅将您从一个“for”循环(最接近的循环/堆栈顶部)中分离出来,而不是多个循环。
由于其他循环在检查之前不执行任何操作,因此可以执行以下操作:

for i in energy_groundJ:
    if i==303:
        break
    for v in [0,1,2]:
        for J in range(0,101):
            P=population_ground()
            Population.append(P)
            print("population at v = "+str(v)+" and J ="+str(J)+"  = "+str(P))

break
条件取决于
energy\u groundJ
中存在的值
303
。插入到
energy\u groundJ
中的值都是浮点数。所以我怀疑303是整数。也许您的
break
条件应该是
i>303.0
break
只中断最里面的循环。Python没有
break
语句,因此最好将循环放在函数中,而使用
return
或使用
itertools.product
来展平循环@mario\u sunny的可能副本,该副本仍将运行循环的所有迭代,但只需避免运行主体。也许可以,但如果有数百万个组合,你仍然会注意到延迟。