Python优雅且高效的过滤筛选:filter

场景描述:

在使用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的优势更明显


提示:个人观点,有误请指正,欢迎评论点赞,转载请附上链接

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值