gpt4 book ai didi

Python:过滤器(函数,序列)和映射(函数,序列)之间的区别

转载 作者:IT老高 更新时间:2023-10-28 22:10:48 29 4
gpt4 key购买 nike

我正在阅读 Python 文档以真正深入了解 Python 语言,并遇到了 filter 和 map 函数。我以前使用过过滤器,但从未使用过映射,尽管我在 SO 上的各种 Python 问题中都见过这两种情况。

在 Python 教程中阅读了它们之后,我对两者之间的区别感到困惑。例如,来自 5.1.3. Functional Programming Tools :

>>> def f(x): return x % 2 != 0 and x % 3 != 0
...
>>> filter(f, range(2, 25))
[5, 7, 11, 13, 17, 19, 23]

>>> def cube(x): return x*x*x
...
>>> map(cube, range(1, 11))
[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]

在我看来,它们的功能几乎完全相同,所以我进入终端以交互方式运行 Python 并测试了我自己的案例。我对上面的第一个和第二个实例都使用了 map ,而对于第一个实例( return x % 2 != 0 and x % 3 != 0 )它返回了一个 bool 值列表而不是数字。

为什么 map 有时返回 bool 值而有时返回实际返回值?

谁能给我解释一下mapfilter的区别?

最佳答案

list(map(cube, range(1, 11)))

等价于

[cube(1), cube(2), ..., cube(10)]

虽然

返回的列表
list(filter(f, range(2, 25)))

相当于运行后的result

result = []
for i in range(2, 25):
if f(i):
result.append(i)

注意,当使用map时,结果中的项目是cube函数返回的值。

相比之下,filter(f, ...)f返回的值并不是result中的项。 f(i) 仅用于确定 ifi 应保留在 result 中。


在 Python2 中,mapfilter 返回列表。在 Python3 中,mapfilter 返回迭代器。上面的 list(map(...))list(filter(...)) 用来保证结果是一个列表。

关于Python:过滤器(函数,序列)和映射(函数,序列)之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18939596/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com