我有一个带有嵌套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的匹配概率,如果是,则将两个密钥添加到集合中并存储它。对于更多数据,由于显而易见的原因,它需要花费很多时间。有什么方法可以优化吗?
答案 0 :(得分:1)
对于初学者,您的代码在iner循环的每次迭代中分配SequenceMatcher
的实例,总共O(N^2)
。
考虑到从中获取的所有内容是单个值,应该可以使其无状态并使用单个预分配的实例。
此外,您不必迭代密钥并在最里面的循环中支付不必要的查询成本(保存O(N^2)
查找),而只需使用for k,v in d.items():
进行迭代。
最后,我几乎可以肯定(需要查看SequenceMatcher
的代码才能确定)可以做到比O(N^2)
做得更好的事情(至少作为{ {1}})。