场景描述:
在使用Python的过程中,我们不可避免的运用过滤,如何让代码既优雅又高效?答案是:filter
问题描述
下面我们利用for循环、推导式、filter过滤器进行测试在0-15000000中筛选偶数项,代码如下:
# 加载包
import time
# 创建数据
length = 15000000
a = range(length)
# 测试for循环
begin_0 = time.perf_counter()
b = []
for x in a:
if x % 2 == 0:
b.append(x)
end_0 = time.perf_counter()
print("for循环耗时:end_0 - begin_0 = {} - {} = {}".format(end_0, begin_0, end_0 - begin_0))
# 测试推导式
begin_1 = time.perf_counter()
c = [x for x in list(a) if x % 2 == 0]
end_1 = time.perf_counter()
print("推导式耗时:end_1 - begin_1 = {} - {} = {}".format(end_1, begin_1, end_1 - begin_1))
# 测试filter过滤器
begin_2 = time.perf_counter()
d = filter(lambda x: x % 2 == 0, a)
end_2 = time.perf_counter()
print("filter耗时:end_2 - begin_2 = {} - {} = {}".format(end_2, begin_2, end_2 - begin_2))
耗时结果如下:
for循环耗时:end_0 - begin_0 = 1.8561335 - 1.035103 = 0.8210305
推导式耗时:end_1 - begin_1 = 2.4578002 - 1.8561678 = 0.6016324
filter耗时:end_2 - begin_2 = 2.457873 - 2.4578672 = 5.800000000277805e-06
结果说明:
本次实验中,for循环的耗时为0.821s,推导式的耗时为0.602s,而filter的耗时仅为0.00005s。由此我们可以发现推导式要比for循环要快,但它们远不及filter的高效(仅为前二者的 10万分之一)。filter就是这么强大,而且代码也相当优雅。
需要注意的是:性能越好的电脑越容易发现它们之间的差异
数据量越大,filter的优势更明显
提示:个人观点,有误请指正,欢迎评论点赞,转载请附上链接