filter, map和reduce在python2中完美地工作。这里有一个例子:
>>> 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]
>>> def add(x,y):
return x+y
>>> reduce(add, range(1, 11))
55
但在Python 3中,我收到以下输出:
>>> filter(f, range(2, 25))
<filter object at 0x0000000002C14908>
>>> map(cube, range(1, 11))
<map object at 0x0000000002C82B70>
>>> reduce(add, range(1, 11))
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
reduce(add, range(1, 11))
NameError: name 'reduce' is not defined
如果有人能给我解释一下这是为什么,我会很感激。
为进一步清晰起见,代码截图如下:
from functools import reduce
def f(x):
return x % 2 != 0 and x % 3 != 0
print(*filter(f, range(2, 25)))
#[5, 7, 11, 13, 17, 19, 23]
def cube(x):
return x**3
print(*map(cube, range(1, 11)))
#[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]
def add(x,y):
return x+y
reduce(add, range(1, 11))
#55
它是这样工作的。要获得map的输出,请使用*或list
from functools import reduce
def f(x):
return x % 2 != 0 and x % 3 != 0
print(*filter(f, range(2, 25)))
#[5, 7, 11, 13, 17, 19, 23]
def cube(x):
return x**3
print(*map(cube, range(1, 11)))
#[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]
def add(x,y):
return x+y
reduce(add, range(1, 11))
#55
它是这样工作的。要获得map的输出,请使用*或list
下面是Filter, map和reduce函数的例子。
数量=(10、11、12,22岁,34岁,43岁,54岁,34岁,67年,87年,88年,98年,99年,87年,44岁,66年)
/ /过滤
oddNumbers = list(lambda x: x%2 != 0, numbers))
打印(oddNumbers)
/ /地图
multiplyOf2 = list(map(lambda x: x*2, numbers))
打印(multiplyOf2)
/ /减少
由于reduce函数不常用,因此已从Python 3的内置函数中删除。它仍然在functools模块中可用,所以你可以这样做:
从functools导入reduce
sumOfNumbers = reduce(lambda x,y: x+y, numbers)
打印(sumOfNumbers)