python中filter的用法
Posted 呆呆象呆呆
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python中filter的用法相关的知识,希望对你有一定的参考价值。
0 概述
filter()
函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
语法:
filter(function, iterable)
参数:
接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回True
或False
,最后将返回True
的元素放到新列表中。
function
判断函数。iterable
可迭代对象。
返回值:
返回列表。
注意:
-
Python2.7
返回列表 -
Python3.x
返回迭代器对象 -
filter()
函数返回一个惰性计算lazily evaluated
的迭代器iterator
或filter对象
。就像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)
例子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))
规避这个惰性计算的问题,赋值的时候直接用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)
例子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))
例子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))
LAST 参考文献
以上是关于python中filter的用法的主要内容,如果未能解决你的问题,请参考以下文章