import random
a = [int(1000*random.random()) for i in xrange(10)]
b = [int(1000*random.random()) for i in xrange(10)]
c = [int(1000*random.random()) for i in xrange(10)]
d = dict()
for i in xrange(len(a)):
for j in xrange(len(b)):
for k in xrange(len(c)):
if (i+j+k == 10):
d[(i,j,k)] = a[i]+b[j]+c[k]
print max(d.values())
该代码找到 a,b,c
中元素的最佳三元组,使得 a[i]+b[j]+b[k]
和 i+j+k=10
成立
最佳答案
首先,您可以更改循环的边界并摆脱最内层的循环:
import random
a = [int(1000*random.random()) for i in xrange(10)]
b = [int(1000*random.random()) for i in xrange(10)]
c = [int(1000*random.random()) for i in xrange(10)]
d = dict()
for i in xrange(10):
for j in xrange(10 - i):
k = 10 - i - j
if k < len(c):
d[(i,j,k)] = a[i]+b[j]+c[k]
print max(d.values())
这将运行时间提高了约 4.5 倍:
In [2]: %timeit original()
10000 loops, best of 3: 166 us per loop
In [3]: %timeit new()
10000 loops, best of 3: 36.1 us per loop
关于python - 我怎样才能更有效地编写这个解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15447382/