filter函数的用法_Python随笔6:Python内置序列函数之filter函数

本文详细介绍了Python内置的filter函数,包括其工作原理和使用方法。通过示例展示了如何利用filter函数筛选列表中的元素,以及如何在字典中过滤符合条件的键值对。同时,文中还提到了filter函数与生成器表达式的等价性,并列举了被视为假值的内置对象。最后,通过实例解释了如何根据条件过滤字典中的键值对。
摘要由CSDN通过智能技术生成

注:本文所有代码均经过Python 3.7实际运行检验,保证其严谨性。

Python内置序列函数系列所有文章都以几个术语为基础:可迭代对象(iterable)、迭代器(iterator)、序列(sequence)、生成器(generator)等。若对此不太理解,可移步Python随笔4查看。

今天讨论的内置序列函数是filter函数。filter的意思是过滤、筛选,而这也的确是这个函数要实现的功能。

fileter函数的具体用法是:

filter(function, iterable)——参数function是一个能够对可迭代对象(iterable)中的元素进行True或者False判断的函数。filter函数返回的就是可迭代对象(iterable)中经过function函数判断后为True的元素构成的迭代器(iterator)。

filter(function, iterable) 相当于一个生成器表达式。

请看以下例子:

l = [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]def function(n): if n > 0: return True else: return Falsefilter(function, l) # 返回的是一个迭代器,无法直接查看。Out[18]: l1 = list(filter(function, l)) # 迭代器中的元素可以通过list()来查看。l1Out[20]: [1, 2, 3, 4, 5]

值得注意的是,function可以是None,如果是这种情况function相当于 (item for item in iterable if item) 。

l = [0, 1, '', 'a', False, True, range(0), set(), (), [], {}]l1 = list(filter(None, l))l1 Out[36]: [1, 'a', True]

这里涉及了对任意类型的变量的值的True和False的判断,下面基本完整地列出了会被视为假值的内置对象:

被定义为假值的常量: None 和 False。

任何数值类型的零: 0, 0.0, 0j, Decimal(0), Fraction(0, 1)。

空的序列和多项集: '', (), [], {}, set(), range(0)。

d6da0cc1a7570a588fdbe7c9d8d23128.png

filter配合可迭代对象如列表、字典,尤其是配合字典时,就很有意思:

strength = {'吕布': 100, '张飞': 98, '关羽': 97, '张郃': 94, '牛金': 83, '潘凤': 75, '刘禅': 7}# 过滤只留下strength的值大于90的键值对的元组形式。 for i in filter(lambda x: x[1] > 90, strength.items()):  print(i, end = " ")('吕布', 100) ('张飞', 98) ('关羽', 97) ('张郃', 94) # 过滤只留下strength的值大于60小于90的键值对的元组形式。 for i in filter(lambda x: 60 < x[1] < 90, strength.items()):  print(i, end = " ")('牛金', 83) ('潘凤', 75) # 过滤只留下strength的值小于10的键值对的元组形式。 for i in filter(lambda x: x[1] < 10, strength.items()): print(i, end = " ")('刘禅', 7) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值