使用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 个回答
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
让我先试着重新表述一下你的问题。
Listn = [x+f(x):x ∈ Listn-1 , f ∈ fnlist]
这里的意思是:
fnlist=[f,g,h]
所以用Python来表达就是:
funclist = [f,g,h]
somelist+=[[x+f(x) for x,f in zip(somelist[-1],funclist)]]
另一方面,如果把同一个函数应用到列表中的所有值,比如:
Listn = [x+f(x):x ∈ Listn-1]
somelist+=[[x+f(x) for x in somelist[-1]]]
最后,如果一个单一的函数依赖于时间片,在某个时间增量 timedelta 下:
Listn = [x+f(t):x ∈ Listn-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 .....