首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行一次for循环

运行一次for循环
EN

Stack Overflow用户
提问于 2016-10-27 00:43:58
回答 1查看 1.9K关注 0票数 0

我正在使用Python运行地下水模型,我的问题如下:

我有三个地下水模型存储在列表Model_Names慢,中,快

每个模型都有不同的属性和不同的模型名,即

我的脚本为特定于每个模型名称的模型生成输入文件。

我正在连续运行这三种型号,每种型号运行5次,总共运行15次。

每次都会产生地下水位。

除了每个模型的第一次运行(其中设置了级别)外,

在下一次仿真中,将先前的仿真设置为起始级别。即慢(I)=慢速(i-1)中的模拟水平。

但是,我不想使用来自不同模型的模拟级别。

即。我不希望在慢速含水层中模拟的水位为介质含水层模拟提供信息。

因此,我试图编写一个for循环,它将检查模型名是否等于前一个模型名。

然后确定要使用哪些输入文件。

但是,我在计算要使用的代码时遇到了问题,该代码指定了循环的前一次迭代。

我尝试了以下代码,其中我希望打印当前的模型名,并将其与

代码语言:javascript
复制
for m, modelname in enumerate(Model_Name):
    print('Model Name = ' +modelname)

    if m!=0 and modelname == Model_Name[m-1]: 
    print ('** STARTING HEAD INPUT FILE UPDATED WITH HEADS FROM PREVIOUS SIMULATION') 

else:
    print('** STARTING HEAD INPUT FILE BUILT ')      

但是它将模型名(I)和模型名(i-1)进行了三次比较,因为它循环了整个Model_Names长度。

我希望它只检查模型名称(I)、==模型名(i-1)是否在每个模型运行时运行一次,而不是循环整个Model_Names长度。是否有一种方法可以检查每个模型的模型名称,而不通过Model_Names循环运行?

我还试着用

代码语言:javascript
复制
while modelname == modelname[i-1]:

我找不到任何参考资料

我想做的事。

对不起,我应该提到for循环嵌套在另一个for循环中:

代码语言:javascript
复制
Lag_times = [0.0000864, 0.000864, 0.00864]
Manage_Freq = [30, 183, 365, 730, 1825, 3650, 18250] 
Model_Name = ['SLOW', 'MEDIUM', 'FAST']       
# Loop through each model variable, build and run model
for i, j in zip (Lag_times, Model_Name):
    hk = i                           # set hydraulic conductivity
    modelname = j                                            
    for k in Manage_Freq:                          
        Freq = k                      
        # The code in here builds and runs model

然后,我想检查模型运行的模型名是否等于前面的#modelname

代码语言:javascript
复制
if modelname !=0 and modelname == Model_Name[modelname-1]: 
              print (' STARTING HEAD INPUT FILE UPDATED WITH HEADS FROM PREVIOUS SIMULATION')     
 else:
              print('** STARTING HEAD INPUT FILE BUILT ')  

我不认为我需要循环遍历Model_Names,但是如果不使用Model_Names,我就无法确定输入什么代码来检查modelname(i) == modelname(i-1)。

EN

回答 1

Stack Overflow用户

发布于 2016-10-27 01:08:27

我想你有点搞不懂enumerate是干什么的。循环将运行三次。

(假设为ModelNames==['Slow','Med','Fast'])

  1. 第一次迭代。M为0,模型名为“慢速”
  2. 第二次迭代M为1,模型名为“Med”
  3. 第三次迭代。M为2,模型名为“快速”

所以modelname == ModelNames[m-1]永远是True

试着写下你真正想要做的事情,代码就会自己写出来:

对于每一个模型,你想做5次。第一次运行将具有一些特殊的初始参数,但下一次运行将具有上一次运行中的参数。

您的代码应该如下所示:

代码语言:javascript
复制
for model in ModelNames: # do something for each model
    params=None #initialize parameters to none meaning they're not set yet
    for i in range(5): #do 5 iterations
        if params is None: #have we gotten new starting parameters?
            params=get_initial_params(model) #figure out the ones for the first run
        output=run_simulation(model,params) #do your simulation
        params=get_next_params(output) #get the next parameters
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40274332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档