【发布时间】:2014-03-06 13:14:36
【问题描述】:
假设你想写一个函数来产生一个对象列表,并且你事先知道这个列表的长度n。
在 python 中,列表支持 O(1) 中的索引访问,因此可以说预先分配列表并使用索引访问它而不是分配空列表并使用 append() 方法是一个好主意。这是因为如果空间不够,我们避免了扩展整个列表的负担。
如果我使用的是 python,在任何情况下,性能可能都没有那么重要,但是预分配列表的更好方法是什么?
我知道这些可能的候选人:
-
[None] * n→ 分配两个列表 -
[None for x in range(n)]— 或 python2 中的xrange→ 构建另一个对象
一个明显优于另一个?
如果我们是n = len(input) 的情况怎么办?既然input 已经存在,那么[None for x in input] 会有更好的表现吗? [None] * len(input)?
【问题讨论】:
-
你是对的,这不太可能是你的性能限制器。
-
如果您遇到性能问题,请分析您的代码。瓶颈很少出现在您认为的位置。
标签: python performance list design-patterns python-3.x