Skip to main content
 首页 » 编程设计

python之我怎样才能更有效地编写这个解决方案

2025年05月04日11虾米姐

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