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
