简单学Python内置函数10filter函数

filter()属于Python的内置函数。单词filter的意思为过滤、筛选,filter()函数的主要功能也是过滤和筛选。filter()有两个参数,第一个是筛选标准,第二个是要筛选的对象(可迭代对象)。运行的结果为返回一个新的迭代器对象,如果要直观输出的话,可以转换为列表。

举例,将不小于3的数筛选出来:

a=[1,2,3,4,5]
list(filter(lambda x:x>=3,a))

返回:[3, 4, 5]

filter()能实现的功能,用for和if也能实现,只不过是filter()的代码简单易懂一些。下面我们从1亿个随机数中筛选一下,用我们之前的timer装饰器(简单学Python——装饰器1——timer(计时器))计一下时,看看filter()的运行速度如何。我们比较一下直接用for和if组合、用推导式、用filter()函数这三种方式来筛选,看看哪个更快一些。

import numpy as np
import time

#定义timer装饰器
def timer(func):#可以改成自己喜欢的名字,不必“timer”
	def wrapper(*args, **kwargs):#可以改成自己喜欢的名字,不必“wrapper”
# 记录开始时间
		start_time = time.time()
# 给实际执行的函数传递参数
		result = func(*args, **kwargs)
# 记录结束时间
		end_time = time.time()
# 计算并输出程度运行耗费的时间
		execution_time = end_time - start_time
		print(f"{func}程序执行了: {execution_time} 秒")
#返回程序运行耗费的时间
		return result
# 将wrapper函数的运行结果返回
	return wrapper

#生成1亿个随机数并转换为列表
l=np.random.randn(100000000)
l=l.tolist()

#直接用for和if组合筛选
@timer
def filter1(l):
    filtered = []
    for i in l:
        if i < 1:
            filtered.append(i)
    return len(filtered)
print(f'筛选出了{filter1(l)}个小于1的数。')

#用推导式筛选
@timer
def filter2(l):
    filtered=[i for i in l if i < 1]
    return len(filtered)
print(f'筛选出了{filter2(l)}个小于1的数。')

#用filter()函数筛选
@timer
def filter3(l):
    filtered=filter(lambda x:x<1,l)
    return len(list(filtered))
print(f'筛选出了{filter3(l)}个小于1的数。')

返回:

<function filter1 at 0x00000257DBBC5FC0>程序执行了: 6.299305438995361 秒

筛选出了84138172个小于1的数。

<function filter2 at 0x00000257DBBC60E0>程序执行了: 4.280745267868042 秒

筛选出了84138172个小于1的数。

<function filter3 at 0x00000257BD747400>程序执行了: 6.633570432662964 秒

筛选出了84138172个小于1的数。

三种方式的结果都对,但执行速度不一样,推导式执行的最快(不到4.3秒),filter()执行的最慢(超过6.6秒)。所以,filter()函数更直观和简洁一些,但执行速度不理想。

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/74998
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 2024 年 7 月 11 日 下午2:29
下一篇 2024 年 7 月 11 日 下午2:29

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注