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
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!