列表推导的效率提升
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}