嵌套for循环花费很多时间在Python(优化)

时间:2018-05-21 12:27:31

标签: python performance for-loop optimization

我有一个带有嵌套for循环的python代码并且花费了太多时间,考虑使用像dict = {'110': ('jade'), '2': ('amber'), '111' : ('harry')}这样的字典

这是我的代码 -

all_keys = dict.keys()
for number in all_keys:
    for more_number in all_keys:
        if SequenceMatcher(None, number, more_number).ratio() > 0.5:
            dict[number] = dict[number].union(dict[more_number])

输出: -

dict = {'110' : ('jade', 'harry'), '2' : ('amber')}

这段代码正在做的是检查密钥是否具有大于0.5的匹配概率,如果是,则将两个密钥添加到集合中并存储它。对于更多数据,由于显而易见的原因,它需要花费很多时间。有什么方法可以优化吗?

1 个答案:

答案 0 :(得分:1)

对于初学者,您的代码在iner循环的每次迭代中分配SequenceMatcher的实例,总共O(N^2)

考虑到从中获取的所有内容是单个值,应该可以使其无状态并使用单个预分配的实例。

此外,您不必迭代密钥并在最里面的循环中支付不必要的查询成本(保存O(N^2)查找),而只需使用for k,v in d.items():进行迭代。

最后,我几乎可以肯定(需要查看SequenceMatcher的代码才能确定)可以做到比O(N^2)做得更好的事情(至少作为{ {1}})。