函数输出的timeit的时间反而少

来源:2-1 如何在列表, 字典, 集合中根据条件筛选数据

慕盖茨3698359

2016-10-27

为什么 我的函数反而用的时间更少

from random import randint 
from timeit import timeit 
data = [randint(-10,10) for _ in xrange(10)] 
def f():     
    l = []     
    for i in data:         
        if i >= 0:             
        l.append(i)     
    return l 
print timeit('filter(lambda x:x>=0,data)','from __main__ import data') 
print timeit('[i for i in data if i>=0]','from __main__ import data') 
print timeit('f','from __main__ import f,data')


写回答

1回答

程序员硕

2016-10-27

你应该是在python3下运行的吧.

python3中filter函数并不返回一个列表,而是一个可迭代对象.所以比列表解析要快, 省去分配列表并把元素插入的过程.

0
0

Python高效编程技巧实战

精选50个Python案例,源自实战,全面提升Python编程能力

2582 学习 · 360 问题

查看课程