列表推导的效率提升

2016-08-11  本文已影响65人  三千万星辰

我们经常会遇到这样的问题,一个很大的列表,把其中满足条件的数据筛选出来。

例子:一个有10万个字典元素的列表,把value大于3000的筛选出来。
对比:列表推导的时间 VS FOR循环的时间
结果:列表推导效率提升近1倍的效率

import datetime
import random
from operator import itemgetter

def init_dict_arr(n):
    arr = []
    for i in range(1, n):
        item = {}
        item['name'] = 'aaaa'
        item['value'] = random.randint(1,100000)
        arr.append(item)
    return arr

if True:
    arr = init_dict_arr(100000)

    
    t1 = datetime.datetime.now()
    if True:
        rv = [n for n in arr if n['value'] > 3000 ]
        pass
    t2 = datetime.datetime.now()
    print((t2-t1))

    if True:
        rv = []
        for n in arr:
            if n['value'] > 3000:
                rv.append(n)
    t3 = datetime.datetime.now()
    print((t3-t2))

    for i in rv[0:5]:
        print(i)

mengan:cookbook mengan$ python tuidao.py 
0:00:00.017254
0:00:00.019450
{'name': 'aaaa', 'value': 60805}
{'name': 'aaaa', 'value': 43249}
{'name': 'aaaa', 'value': 40681}
{'name': 'aaaa', 'value': 65265}
{'name': 'aaaa', 'value': 70412}
mengan:cookbook mengan$ python tuidao.py 
0:00:00.013544
0:00:00.018511
{'name': 'aaaa', 'value': 67490}
{'name': 'aaaa', 'value': 84046}
{'name': 'aaaa', 'value': 95663}
{'name': 'aaaa', 'value': 89016}
{'name': 'aaaa', 'value': 43812}
mengan:cookbook mengan$ python tuidao.py 
0:00:00.012729
0:00:00.019673
{'name': 'aaaa', 'value': 20080}
{'name': 'aaaa', 'value': 93359}
{'name': 'aaaa', 'value': 88697}
{'name': 'aaaa', 'value': 86673}
{'name': 'aaaa', 'value': 6660}
mengan:cookbook mengan$ python tuidao.py 
0:00:00.014646
0:00:00.018406
{'name': 'aaaa', 'value': 92186}
{'name': 'aaaa', 'value': 79040}
{'name': 'aaaa', 'value': 88661}
{'name': 'aaaa', 'value': 65994}
{'name': 'aaaa', 'value': 89451}
上一篇 下一篇

猜你喜欢

热点阅读