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

标签 python performance python-2.7

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/

相关文章:

python - block - 将输入发送到 python 子进程管道

python - 限制 Tornado 中特定 View 的连接

python - 如何使 Pandas 数据框 Fortran 类型有序

c++ - 找到三个整数中最大值的最有效方法

python - 无法使用 python3 在 numpy 中导入名称 'multiarray'

python - 发送串口中断 'character'(唤醒调用)

python - Pandas 绘制一组

performance - 保存 Matlab 矩阵的最快方法

python - 如何在 django rest 框架中保存嵌套关系?

python - 如何检查字符串是否是 pangram?