map()函数和filter()区别和用法
0.list(map(sum,))
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
list(map(sum,))
TypeError: 'int' object is not iterable
请问为什么会报错,不是可迭代对象么?
list(map(sum,,))
Traceback (most recent call last):
File "<pyshell#21>", line 1, in <module>
list(map(sum,,))
TypeError: 'int' object is not iterable
可以用map求),sum()]吗?
1.
list(filter(pow,,))
Traceback (most recent call last):
File "<pyshell#26>", line 1, in <module>
list(filter(pow,,))
TypeError: filter expected 2 arguments, got 3
filter()和map()的区别是在于filter是把结果中的False过滤掉,
filter返回结果为真的元素,map返回运算结果
为什么报错原因是要求期望两个参数但是返回三个?
list(filter(max,,))
Traceback (most recent call last):
File "<pyshell#29>", line 1, in <module>
list(filter(max,,))
TypeError: filter expected 2 arguments, got 3
小甲鱼说这两个函数特别重要,请求各位前辈指引,晚辈感激不尽{:7_123:} >>> list(map(sum,(,)))
>>> hrpzcf 发表于 2022-3-18 22:04
请问为什么要加括号 李二蛋 发表于 2022-3-18 22:44
请问为什么要加括号
map(a, b),a是函数,b是可迭代对象
map会将可迭代对象“b”的每一项作为参数放入函数“a”执行
这里你的函数“a”是sum,,而sum又是要求参数是可迭代对象,所以相当于要求b中的每一项都是可迭代对象
所以b写成(, )或者[ , ]等等都可以,map会将和分别放入sum计算,即sum()... hrpzcf 发表于 2022-3-18 22:53
map(a, b),a是函数,b是可迭代对象
map会将可迭代对象“b”的每一项作为参数放入函数“a”执行
这里 ...
0.
b是一个列表,将b的每一项作为参数放入函数a中
那么相对于函数是pow,max此类需要可迭代对象是多列表的情况
b是多个列表,取多个列表的每一项拼接成参数放入函数a中
可以这样理解嘛
1.
>>> list(filter(max, , , ))
Traceback (most recent call last):
File "<pyshell#55>", line 1, in <module>
list(filter(max, , , ))
TypeError: filter expected 2 arguments, got 4
>>> list(filter(pow, , ))
Traceback (most recent call last):
File "<pyshell#56>", line 1, in <module>
list(filter(pow, , ))
TypeError: filter expected 2 arguments, got 3
请问前辈filter()是不是无法进行都多列表的运算? map()
有若干个元素,经过一个函数/方法,变成另外一个元素:
a, b, c -------> 函数 ---------> x, y, z
filter()
有若干个元素,经过一个函数/方法,只挑选出符合条件的元素:
a, b, c -------> 函数 --------> a, c 本帖最后由 hrpzcf 于 2022-3-19 11:01 编辑
李二蛋 发表于 2022-3-19 09:43
0.
b是一个列表,将b的每一项作为参数放入函数a中
那么相对于函数是pow,max此类需要可迭代对象是多列 ...
map和filter功能、如何传参你都没理解
功能:
1)map(func, ) --> 返回 (它返回的不是列表,而是生成器,要用list函数把生成器转换为列表或者对生成器for循环等,我这里写返回列表是方便理解)
2)filter(func, ) --> func(a), func(b), func(c), func(d)... --> 只取中经func调用后为True的,比如 func(b), func(c) 结果都是True,那么filter返回结果就是 (它返回的不是列表,而是迭代器,要用list函数把生成器转换为列表或者对生成器for循环等,我这里写返回列表是方便理解)
待续....
传参:
你的代码:list(filter(max, , , ))
你是想max(), max(), max()?
首先你传了max, , , 4个参数给filter,这就是错的,filter只接受2个参数
给, , 套上一层括号不就变一个参数了吗?max, [, , ] 不就变两个参数了吗?[, , ]共3项,把每一项传给max不就分别是max(), max(), max()了吗?
filter会把[, , ] 中经过max(), max(), max()后结果是True的项选出来,max(), max(), max()结果分别是5, 2, 9,都非0,都可判定是True,所以filter选出来的项分别就是, , ,结果就是[, , ]
(我不理解你想达到什么目的) hrpzcf 发表于 2022-3-19 10:48
map和filter功能、如何传参你都没理解
功能:
特别感谢您,我一下子就明白了,我没有好好看速查宝典,不知道filter只接受两个参数,那么filter和pow永远无法兼容,因为pow至少要三个参数才可以,抱歉我有些钻牛角尖,刚开始学想什么东西都搞懂,细枝末节抓着不放,感谢前辈不厌其烦的帮助{:7_119:} 傻眼貓咪 发表于 2022-3-19 10:01
map()
有若干个元素,经过一个函数/方法,变成另外一个元素:
a, b, c -------> 函数 ---------> x, y, z ...
明白啦明白啦,感谢前辈指点,祝您万事顺意 李二蛋 发表于 2022-3-19 11:12
特别感谢您,我一下子就明白了,我没有好好看速查宝典,不知道filter只接受两个参数,那么filter和pow永 ...
内置的pow最少只需要2个参数,第三个是可选的
但是直接filter(pow, [...])的话filter会把[...]中的每一项传给pow,pow也只能接受到一个参数,这是不行的,想要实现也很简单,对pow进行一层包装就可以了
待续... 李二蛋 发表于 2022-3-19 11:12
特别感谢您,我一下子就明白了,我没有好好看速查宝典,不知道filter只接受两个参数,那么filter和pow永 ...
def my_pow(x):
return pow(*x)
print(list(filter(my_pow, [, , ]))) # 没意义
print(list(map(my_pow, [, , ])))
# 结果:
# [, , ]
#
hrpzcf 发表于 2022-3-19 11:20
return pow(*x)
前辈这段代码是什么意思吖
李二蛋 发表于 2022-3-19 19:58
return pow(*x)
前辈这段代码是什么意思吖
调用函数时,参数前面加星号是解包的意思,要求参数是元组或者列表之类的才能解包。定义函数时形参前面的星号是打包参数的意思。
比如x是,直接pow(x)【即pow()】肯定是不行的,pow不接受列表参数,需要把列表解包,pow(*x)【即pow(3, 2)】 hrpzcf 发表于 2022-3-19 20:13
调用函数时,参数前面加星号是解包的意思,要求参数是元组或者列表之类的才能解包。定义函数时形参前面的 ...
明白了明白啦,喜喜,感谢前辈咯
hrpzcf 发表于 2022-3-19 20:13
调用函数时,参数前面加星号是解包的意思,要求参数是元组或者列表之类的才能解包。定义函数时形参前面的 ...
>>> list(map(lambda x:pow(*x), [, , ]))
前辈您看我这样写行么
李二蛋 发表于 2022-3-20 14:51
>>> list(map(lambda x:pow(*x), [, , ]))
前辈您看我这样写行么
可以,匿名函数写法,函数简短的时候这么写更方便 hrpzcf 发表于 2022-3-20 16:04
可以,匿名函数写法,函数简短的时候这么写更方便
{:7_112:}
页:
[1]