当前位置:   article > 正文

python中filter的用法_python中的filter方法

python中的filter方法

0 概述

filter()函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。

语法:

filter(function, iterable)
  • 1

参数:

接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回TrueFalse,最后将返回True的元素放到新列表中。

  • function判断函数。
  • iterable可迭代对象。

返回值:

返回列表。

注意:

  • Python2.7返回列表

  • Python3.x返回迭代器对象

  • filter()函数返回一个惰性计算lazily evaluated的迭代器iteratorfilter对象。就像zip函数惰性计算那样。不能通过index访问filter对象的元素,也不能使用len()得到它的长度。但我们可以强制转换filter对象list。也就是说filter()返回值使用一次后变为空(会在例子2中进行说明)相对Python2.x提升了性能,可以节约内存。

1 举例说明

例子1:最简单的使用说明

def is_odd(n):
    return n % 2 == 1
newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(newlist)
  • 1
  • 2
  • 3
  • 4

例子2:迭代器仅可使用一次的问题

map一样,filter函数Python3中返回一个惰性计算的filter对象迭代器。我们不能通过index访问filter对象的元素,也不能使用len()得到它的长度。

可以参考一下 python中map的用法

def is_odd(n):
    return n % 2 == 1
newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(newlist)
print(list(newlist))
print(list(newlist))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

规避这个惰性计算的问题,赋值的时候直接用list进行转换一下:

def is_odd(n):
    return n % 2 == 1

# 不使用list转换 
print("惰性计算")  
newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(list(newlist))
for i in newlist:
    print(i,end = " ")
print(list(newlist))

# 使用list转换
print("规避惰性计算")
newlist = list(filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]))
print(newlist)
for i in newlist:
    print(i,end = " ")
print(newlist)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

例子3:另一个比较简单的例子

import math
def is_sqr(x):
    return math.sqrt(x) % 1 == 0
 
newlist = filter(is_sqr, range(1, 101))
print(newlist)
print(list(newlist))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

例子4:与dict构成的列表处理例子

dict_a = [{'name': 'python', 'points': 10}, {'name': 'java', 'points': 8}]
test_filter = filter(lambda x : x['name'] == 'python', dict_a)
print(list(test_filter))
  • 1
  • 2
  • 3

image-20210826152455923

LAST 参考文献

Python filter() 函数 | 菜鸟教程

python中的lambda函数用法 - 知乎

关乎Python lambda你也看得懂 - 知乎

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/208198
推荐阅读
相关标签
  

闽ICP备14008679号