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

时间:2021-07-22 21:04:36

标签: python list loops for-loop

我想附加在单独的列表中,例如:list1 for j=1,list 2 for 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]')

1 个答案:

答案 0 :(得分:0)

我建议考虑使用 numpy 来做这样的事情(从它的样子来看)。您可以在更少的行中完成其中的许多操作 - 当您进行相当大的数值计算(大约 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 中进行 [矩阵] 数学(以及许多其他事情)的替代方法。

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 填充的可能性。)