使用Python循环遍历时间和列表元素——一维湖泊温度模型模拟

0 投票
2 回答
565 浏览
提问于 2025-04-17 09:27

我想建立一个模拟湖泊水温的一维模型。这个湖泊被分成了好几层,每一层的温度值都存储在一个列表的元素里。模拟是随着时间进行的。我需要在每个时间步骤中,使用函数和算法来改变列表中的每个元素,或者某些特定的元素序列。

我找不到最好的方法来做主循环:
也就是要在时间和列表元素之间循环,并且能够使用在上一个时间步骤中得到的某个特定元素的值。

这只是一个例子:

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 .....

撰写回答