【问题标题】:How to append in separate lists for every iteration of for loop如何为for循环的每次迭代附加单独的列表
【发布时间】:2021-07-22 21:04:36
【问题描述】:

我想附加在单独的列表中,例如: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]')

【问题讨论】:

  • 根据您所说的,听起来您正在寻找使用 j 的索引来创建单独的列表 - 所以在您拥有的代码中,您将有 10 个单独的列表,对吗?
  • 另外,你能提供一个Energy_list应该是什么的例子吗?
  • @john 是的,我将有 10 个单独的列表,energy_list 是从单独函数返回的值:Energy_list.append(Ene)
  • 我已经编辑了代码示例!我想为 j=1 到 10 的 cor[j] 打印 10 个值

标签: python list loops for-loop


【解决方案1】:

我建议考虑使用numpy 来处理类似的事情(从它的外观来看)。您可以在少得多的行数内完成许多此类操作 - 与 Python 列表和循环相比,当您进行相当大的数值计算(大约 N=10_000)时,它保持了挂钟效率。

Anywho,您所要求的解决方案似乎是......

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

【讨论】:

  • 感谢您的帮助!
  • 如果这是您问题的解决方案,请将其标记为此类。 ?
  • 有了这个答案,我收到错误:列表索引超出范围。你能告诉我如何解决它吗?
  • 您使用哪种实现方式获得箭头?另外,你能指定这个错误发生在哪里吗?我无权访问您的整个列表集。实际上,如果您可以提供此处定义的变量的所有值,那将是理想的——例如Energy_listE1MeanDivide 等。然后,我可以适当地修改我的解决方案以满足您的需求。
猜你喜欢
  • 1970-01-01
  • 2018-02-13
  • 1970-01-01
  • 1970-01-01
  • 2017-02-09
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多