【发布时间】:2015-05-06 11:19:40
【问题描述】:
我知道 Python 不是为了速度而构建的,但我想提高以下代码的性能:
listA = [1,2]
listB = [1,2,3,4,5,6,7,8,9,10]
# pre-allocate for speed. Appending empty list is slower?
newList = ['NaN']*len(listB)
# Do I need a loop? Can I use something faster?
for n in xrange(len(listB)):
if listB[n] % 2 == 1:
newList[n] = listA[0]
else:
newList[n] = listA[1]
我的问题是listB 会变得非常大。
我已经为newList 预先分配了内存并使用了xrange。我相信这些可以显着提高大型列表的速度。
但是我什至需要一个 for 循环,因为每个循环都不依赖于先前的结果。 python有数组类型吗?
我可以拆分 listB 并并行运行类似于 Matlab 中的 parfor 的操作吗?
附加信息: 对于我的问题,随着 listA 变大,listB 会呈指数级增长。
对于 listB 中的每个项目,都需要在 listA 中进行查找。然后执行计算(不需要取模)并将结果附加到 newList。然后我对 newList 进行统计分析(为简单起见取平均值)。 newList 将始终与 listB 的长度相同。
【问题讨论】:
-
你不需要预先分配任何东西,只需遍历 listB
-
应该
listB[1]是listA[1]? -
是的。我已经更正了。谢谢
-
listB 可以有多大?另外,你真的需要创建一个新列表吗?
-
所以你是说 listB 会随着迭代而增长?
标签: python performance loops for-loop