以前一直认为python循环过滤的话,使用filter过滤器是最快,觉得是内置的函数,肯定快。。。最近几天看到个相关文章,讲Python性能优化的,看到说列表推导速度比较快,所以对4种常用的循环进行了一个比较。代码如下:
#coding=utf-8
'''
Created on 2012-8-2
@author : bailiangjun
'''
import timeit
a = xrange(100000)
def test1():
"""
@attention : for循环
"""
temp = []
for item in a:
if item % 21313 == 5 and item % 19807 == 0:
temp.append(item)
return temp
def test2():
"""
@attention : 过滤器
"""
def dataFilter(item):
if item % 21313 == 5 and item % 19807 == 0:
return True
return filter(dataFilter, a)
def test3():
"""
@attention : 列表推导----返回数组
"""
return [item for item in a if item % 21313 == 5 and item % 19807 == 0]
def test4():
"""
@attention : 列表推导----返回迭代器
"""
return (item for item in a if item % 21313 == 5 and item % 19807 == 0)
if __name__ == '__main__':
t1 = timeit.Timer("TestDemo2.test1()", "import TestDemo2")
t2 = timeit.Timer("TestDemo2.test2()", "import TestDemo2")
t3 = timeit.Timer("TestDemo2.test3()", "import TestDemo2")
t4 = timeit.Timer("TestDemo2.test4()", "import TestDemo2")
print("for循环:%f" % t1.timeit(100))
print("过滤器:%f" % t2.timeit(100))
print("列表推导----返回数组:%f" % t3.timeit(100))
print("列表推导----返回迭代器:%f" % t4.timeit(100))
执行结果为:
for循环:1.105171
过滤器:2.183305
列表推导----返回数组:0.927892
列表推导----返回迭代器:0.000135
通过上面的测试,发现使用过滤器居然是最慢的。。列表推导很快,但是会花费很多时间把迭代器转为list,那么当处理数据的时候,尽量使用迭代器来过滤速度远远大于其他3种。
欢迎各位继续补充