使用python循环时间和列表元素 - 一维湖泊温度模型模拟

时间:2012-01-03 15:44:49

标签: python

我想建立一个湖泊水温的一维模型模拟。 湖泊分为几层,每层温度值都存储为一个列表元素。模拟随着时间的推移而进行。我必须在每个时间步骤中使用函数和算法更改列表的每个元素或列表的某些序列。 我找不到做主循环的最佳方法: 循环遍历时间和列表元素,并能够使用在上一个时间步骤中获得的列表中特定元素的值。

这只是一个例子:

Time step 0: list”0”=[10,10,10]

Time step 1: list”1”=[  list”0”[0]+def change(n) ,  list”0”[1]+ 1   , list”0”[2]+3  ]

Time step 2: list”2” ”=[  list”1”[0]+ def change(t),  list”1”[1]+ 2   , list”1”[2]+2  ]

Time step 3: list”3=[  list”2”[0]+ def change(r),  list”2”[1]+ 1   , list”2”[2]+4  ]

最初我在列表清单中考虑过:
每个列表元素对应一个时间步,这样我就可以访问上一个时间步并使用前一个值(这是一个好方法吗?):

Time step 0 Time step 1 Time step 2 Time step 3 
List=[[10,10,10],[ 12,13,14],[ 12,14,12],[ 11,13,11]] 

我在哪里可以阅读一些内容来帮助我或一些脚本示例?谢谢。

2 个答案:

答案 0 :(得分:3)

列表清单没问题。您只需要每次访问最后一个元素(使用负索引很容易)并保持有序的步骤序列。您可以执行以下操作。例如:

values = [[10, 10, 10]]
# condition would be the one that makes the simulation stop (number of steps, time...)
while condition:
   prev = values[-1]
   values.append([function1(prev[0]),
                  function2(prev[1]),
                  function3(prev[2]))
   # update the condition, if needed

答案 1 :(得分:1)

让我先试着改写一下你的问题陈述

List n = [x + f(x):x∈List n-1 ,f∈f n list]

,其中

˚F<子>名词列表= [F,G,H]

所以在python术语中归结为

funclist = [f,g,h]
somelist+=[[x+f(x) for x,f in zip(somelist[-1],funclist)]]

另一方面,如果相同的功能应用于列表的所有值,如

List n = [x + f(x):x∈List n-1 ]

somelist+=[[x+f(x) for x in somelist[-1]]]

最后,如果单例函数依赖于时间片,则在某个增量时间δ

List n = [x + f(t):x∈List n-1 ,t∈T]

,其中  T = [t,t +Δt,t +2Δt,......]

然后首先你需要生成时间序列,你可以使用itertools.count来实现这个目的,如

itertools.count(someStartTime,delta)

然后

somelist+=[[x+f(t) for x,t in zip(somelist[-1],itertools.count(someStartTime,delta))]]

注意:f,g,h是python函数,可以定义为

def f(n):
    ........
    return .....