python 效率 算法_如何最高效的实现这样的python算法

本文通过对比两种不同的Python实现方法,展示了如何利用字典(hash表)替代列表查找来显著提高代码执行效率。

假如希望代码看起来简单,那么就很方便实现:

[k for k in list2 if k not in list1]

如果希望提高效率,那么假设这时候list1 是个非常长的list;由于需要遍历list2,这部分时间是不可避免的,那么问题就转变为怎么在list1中寻找元素让时间消耗最短。我做了下面的例子:

# -*- coding: utf-8 -*-

import time

list1 = range(0, 10000)

list2 = [1, 20, 40, 60, -10, -20]

LIMIT = 10000 # 循环次数来验证时间

def method1():

then = time.time()

for i in range(0, LIMIT): # 循环

[k for k in list2 if k not in list1]

print 'cost time:', time.time() - then

def method2():

then = time.time()

data = dict([(k, 1) for k in list1])

for i in range(0, LIMIT):

[k for k in list2 if not data.get(k)]

print 'cost time:', time.time() - then

method1()

method2()

结果输出时间,不出意外,第二个好快些。因为采用了dict的方式,也就是hash的路由匹配方式,内部实现机制估计是二叉树,比遍历list1来寻找快多了。

cost time: 4.26041412354 # method1

cost time: 0.0187389850616 # method2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值