为什么python中的代码速度慢?

时间:2016-06-01 04:07:19

标签: python

我是python的新手 我知道有点c ++,使用数组。 c ++中的数组并不是那么慢 列表会减慢它吗?我不确定是否可以使用元组。

import random
list1=[]
n=1000000
for i in range(n):
    list1.append(random.randint(1,6))

x1=list1.count(1)
x2=list1.count(2)
x3=list1.count(3)
x4=list1.count(4)
x5=list1.count(5)
x6=list1.count(6)

xp1=(100*x1)/n
xp2=(100*x2)/n
xp3=(100*x3)/n
xp4=(100*x4)/n
xp5=(100*x5)/n
xp6=(100*x6)/n

print("The number 1 was found %d - %.2f percent" %(x1,xp1))
print("The number 2 was found %d - %.2f percent" %(x2,xp2))
print("The number 3 was found %d - %.2f percent" %(x3,xp3))
print("The number 4 was found %d - %.2f percent" %(x4,xp4))
print("The number 5 was found %d - %.2f percent" %(x5,xp5))
print("The number 6 was found %d - %.2f percent" %(x6,xp6))

2 个答案:

答案 0 :(得分:3)

运行random.randint(1, 6)一百万次是很慢的,它与你的列表没什么关系:

In [18]: %timeit for i in xrange(1000000): random.randint(1, 6)
1 loops, best of 3: 1.33 s per loop

如果你放弃random.randint()并切换到1 + int(random.random() * 6)并使用列表理解,你可以变得更快:

In [111]: %timeit for i in xrange(1000000): 1 + int(random.random() * 7)
1 loops, best of 3: 300 ms per loop

最简单的速度改进是使用numpy

In [20]: %timeit numpy.random.randint(1, 7, size=1000000)
100 loops, best of 3: 16.3 ms per loop

答案 1 :(得分:0)

不是主导运行时间的列表,而是对random.randint的调用。如果您将list1.append(random.randint(1,6))替换为list1.append(1),则速度会快10倍。

此外,列表理解应该比使用for的{​​{1}}循环略快,因此您可以尝试

append