在Python的性能方面,是一个列表理解,还是比for循环更快的map(),filter()和reduce()等函数?从技术上讲,为什么它们"以C速度运行",而"for循环以python虚拟机速度运行"?
假设在我正在开发的游戏中,我需要使用for循环绘制复杂且巨大的地图.这个问题肯定是相关的,因为如果列表理解确实更快,那么为了避免滞后(尽管代码的视觉复杂性),这将是一个更好的选择.
我想知道为什么列表理解比附加到列表要快得多.我认为差异只是表达,但事实并非如此.
>>> import timeit
>>> timeit.timeit(stmt='''\
t = []
for i in range(10000):
t.append(i)''', number=10000)
9.467898777974142
>>> timeit.timeit(stmt='t= [i for i in range(10000)]', number=10000)
4.1138417314859
Run Code Online (Sandbox Code Playgroud)
列表理解速度提高了50%.为什么?
我想知道下面的方法是否会被认为是不好的做法,如果是的话,如果有人可以给出另一种方法的指导.
这是有问题的代码:
a = np.array([[1,2,3],[4,5,6]])
b = np.array([-5,5])
c = np.array([np.multiply(a[x],b[x]) for x in range(2)])
Run Code Online (Sandbox Code Playgroud)
这里的目标是获得一个与'a'形状相同的数组,其中'a'的第一个元素中的值乘以'b'的第一个元素,并且'a'的第二个元素中的值相乘由'b'的第二个元素
上面的代码是有效的,但考虑到列表/数组的混合,我担心这是建议不要 - 但我不清楚更优雅的解决方案.提前谢谢了!
python ×3
for-loop ×1
list ×1
map-function ×1
numpy ×1
performance ×1
python-2.7 ×1
python-3.x ×1