如何在for循环的每次迭代中附加到单独的列表中

2024-10-01 13:36:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我想附加在单独的列表中,例如:list1代表j=1,list2代表j=2,依此类推(total[j]=(sum)(sum_list[j]/mcSteps-j)

下面是代码:

sum_list=[]
cor =[]

   
         for j in range(10):
             for i in range(mcSteps-j):
                 sum_list.append(Energy_list[i]*Energy_list[i+j])

        total[j]=sum(sum_list[j])
        deltat[j]=total[j]/(mcSteps-j)
        cor[j].append(Divide*(deltat[j]-E1mean*E1mean))
print('cor[j]')

Tags: in列表forrange代表listenergytotal
1条回答
网友
1楼 · 发布于 2024-10-01 13:36:22

我建议考虑^{}这样的东西(从它看起来的样子)。您可以用少得多的行来完成这些操作,并且当您进行相当大的数值计算时(大约N=10_000),与Python列表和循环相比,它可以保持挂钟效率

不管是谁,你所要求的解决方案似乎是

from typing import List

def compute_delta_t(ls: List, steps: int, offset: int) -> float:
    energies = [ls[step] * ls[step + offset] for step in range(steps)]
    delta_t = sum(energies) / (steps - offset)
    return delta_t

delta_ts = [
    compute_delta_t(Energy_list, mcSteps, offset)
    for offset in range(10)
]
corrs = [Divide * (delta_t - (E1mean ** 2)) for delta_t in delta_ts]

上述方法应该是相当有效的Python代码(尽管变得不可靠和不可读)


numpy,一种在Python中进行[matrix]数学(以及其他许多事情)的替代方法

import numpy as np

def compute_delta_t(ls: np.ndarray, mcSteps: int, offset: int) -> np.ndarray:
    energies = ls[:(mcSteps - offset)] * ls[offset:(mcSteps + offset)]
    delta_t = energies.sum() / (mcSteps - offset)
    return delta_t

delta_ts = np.asarray([
    compute_delta_t(Energy_list, mcSteps, offset)
    for offset in range(10)
])
corrs = Divide * (delta_ts - (E1mean ** 2))

这种基于numpy的方法看起来非常类似于Python方法,因为我不确定每个np.ndarray的大小是否相同。如果他们这样做了,那么您正在寻找的大部分内容可以在大约2-3行代码中完成。😅

(对于那些知道我在说什么的人,我忽略了用0填充的可能性。)

相关问题 更多 >