# Python `filter()`函数
> 原文: [https://thepythonguru.com/python-builtin-functions/filter/](https://thepythonguru.com/python-builtin-functions/filter/)
* * *
于 2020 年 1 月 7 日更新
* * *
`filter()`函数将一个函数和一个序列作为参数并返回一个可迭代的对象,仅按顺序产生要为其返回`True`的项目。 如果传递了`None`而不是函数,则将求值为`False`的序列中的所有项目删除。 `filter()`的语法如下:
**语法**: `filter(function or None, iterable) --> filter object`
这是一个例子:
**Python 3**
```py
>>>
>>> def is_even(x):
... if x % 2 == 0:
... return True
... else:
... return False
...
>>>
>>> f = filter(is_even, [1, 3, 10, 45, 6, 50])
>>>
>>> f
<filter object at 0x7fcd88d54eb8>
>>>
>>>
>>> for i in f:
... print(i)
...
10
6
50
>>>
```
试试看:
```py
def is_even(x):
if x % 2 == 0:
return True
else:
return False
f = filter(is_even, [1, 3, 10, 45, 6, 50])
print(f)
for i in f:
print(i)
```
要立即产生结果,我们可以使用`list()`函数。
**Python 3**
```py
>>>
>>> list(filter(is_even, [1, 3, 10, 45, 6, 50]))
[10, 6, 50]
>>>
>>>
>>> list(filter(None, [1, 45, "", 6, 50, 0, {}, False])) # function argument is None
[1, 45, 6, 50]
>>>
```
试一试:
```py
def is_even(x):
if x % 2 == 0:
return True
else:
return False
print( list(filter(is_even, [1, 3, 10, 45, 6, 50])) )
# function argument is None
print( list(filter(None, [1, 45, "", 6, 50, 0, {}, False])) )
```
在 Python 2 中,`filter()`返回实际列表(这不是处理大数据的有效方法),因此您无需将`filter()`包装在`list()`调用中。
**Python 2**
```py
>>>
>>> filter(is_even, [1, 3, 10, 45, 6, 50])
[10, 6, 50]
>>>
```
这是其他一些例子。
**Python 3**
```py
>>>
>>> filter(lambda x: x % 2 != 0, [1, 3, 10, 45, 6, 50]) # lambda is used in place of a function
[1, 3, 45]
>>>
>>>
>>> list(filter(bool, [10, "", "py"]))
[10, 'py']
>>>
>>>
>>> import os
>>>
>>> # display all files in the current directory (except the hidden ones)
>>> list(filter(lambda x: x.startswith(".") != True, os.listdir(".") ))
['Documents', 'Downloads', 'Desktop', 'Pictures', 'bin', 'opt', 'Templates', 'Public', 'Videos', 'Music']
>>>
```
试一试:
```py
# lambda is used in place of a function
print(filter(lambda x: x % 2 != 0, [1, 3, 10, 45, 6, 50]))
print(list(filter(bool, [10, "", "py"])))
import os
# display all files in the current directory (except the hidden ones)
print(list(filter(lambda x: x.startswith(".") != True, os.listdir(".") )) )
```
* * *
* * *
- 初级 Python
- python 入门
- 安装 Python3
- 运行 python 程序
- 数据类型和变量
- Python 数字
- Python 字符串
- Python 列表
- Python 字典
- Python 元组
- 数据类型转换
- Python 控制语句
- Python 函数
- Python 循环
- Python 数学函数
- Python 生成随机数
- Python 文件处理
- Python 对象和类
- Python 运算符重载
- Python 继承与多态
- Python 异常处理
- Python 模块
- 高级 Python
- Python *args和**kwargs
- Python 生成器
- Python 正则表达式
- 使用 PIP 在 python 中安装包
- Python virtualenv指南
- Python 递归函数
- __name__ == "__main__"是什么?
- Python Lambda 函数
- Python 字符串格式化
- Python 内置函数和方法
- Python abs()函数
- Python bin()函数
- Python id()函数
- Python map()函数
- Python zip()函数
- Python filter()函数
- Python reduce()函数
- Python sorted()函数
- Python enumerate()函数
- Python reversed()函数
- Python range()函数
- Python sum()函数
- Python max()函数
- Python min()函数
- Python eval()函数
- Python len()函数
- Python ord()函数
- Python chr()函数
- Python any()函数
- Python all()函数
- Python globals()函数
- Python locals()函数
- 数据库访问
- 安装 Python MySQLdb
- 连接到数据库
- MySQLdb 获取结果
- 插入行
- 处理错误
- 使用fetchone()和fetchmany()获取记录
- 常见做法
- Python:如何读取和写入文件
- Python:如何读取和写入 CSV 文件
- 用 Python 读写 JSON
- 用 Python 转储对象