首页 > 解决方案 > 如何有效地从 10,000 个 Python 列表中挑选第 i 个项目并将它们高效地转换为列表?

问题描述

我正在研究蒙特卡洛算法。从本质上讲,由于涉及时间,每次迭代都会生成一个包含 50 项涵盖 50 年模拟的列表。我附加这些,以便我有一个包含 10,000 个元素的列表,每个元素都是 50 个数字的列表。

现在,当然,我需要将每年的数据放入包含 10,000 个项目的列表中,以便进行年度直方图分析。

举个简单的例子,如果我有 5 次运行 3 年的数据,我可能会有一个如下所示的列表:

[[1,2,3, 4,5], [1.1, 2.2, 3.3, 4.4, 5.5], [2.5, 2.6, 2.7, 2.8, 2.9]]

我需要把它放到一个看起来像这样的列表中:

[[1, 1.1, 2.1], [2, 2.2, 2.6], [3, 3.3, 2.7], [4, 4.4, 2.8], [5, 5.5, 2.9]]

显然,我可以通过双循环来强制执行此操作,但是对于 500,000 个数据点,我正在寻找更高效和 Pythonic 的东西。

是否有人对可以快速有效地实现这一点的内部(或包)有足够的了解?

标签: pythonhistogram

解决方案


您可以使用zipnumpy.transpose(可能更快):

d = [[1,2,3, 4,5], [1.1, 2.2, 3.3, 4.4, 5.5], [2.5, 2.6, 2.7, 2.8, 2.9]]

zip(*d) # returns a generator in Python3, use list on top of it if needed

import numpy as np
np.transpose(d) # returns a np.array, which will behave more or less the same as a Python list
# or simply something like 
arr = np.array(d)
arr[:,i] # returns the i-th values in each row

推荐阅读