python - 递归地定义带有谓词的映射
问题描述
如果元素满足谓词,我想定义一个映射列表元素的映射函数。
我的想法是将列表分成两半并递归应用该函数。捕获基础将是当列表中只剩下 1 个元素时,该元素将被检查 if prae(element) == True
、 True ->fun(x)
和 False -> pass
。然后我将连接两半以获得最终列表。
def is_odd(n):
return n%2 == 1
def square(x):
return x**2
def map_ifr(lis,prae,fun):
if len(lis) == 1:
results = [fun(x) for x in lis if prae(x) == True]
else:
mid = len(lis)//2
first_half = lis[:mid]
second_half = lis[mid:]
map_ifr(first_half,prae,fun) + map_ifr(second_half,prae,fun)
a = map_ifr([1 , 2 , 3 , 4 , 5 , 6 ], is_odd , square )
a
我得到操作数类型为的错误Nonetype
。我不确定为什么会这样。我经常遇到问题,Nonetype
不知道它的真正原因。感谢您的帮助
解决方案
您不会从map_ifr
函数返回任何内容,因此默认情况下它会返回None
并map_ifr(first_half,prae,fun) + map_ifr(second_half,prae,fun)
在线失败,因为None + None
不是有效的操作。更正的代码:
def map_ifr(lis, prae, fun):
if len(lis) == 1:
results = [x for x in lis if prae(x) == True]
else:
mid = len(lis)//2
first_half = lis[:mid]
second_half = lis[mid:]
results = map_ifr(first_half,prae,fun) + map_ifr(second_half,prae,fun)
return results
a = map_ifr([1 , 2 , 3 , 4 , 5 , 6 ], is_odd , square)
print(a)
输出:
[1, 3, 5]
推荐阅读
- java - java中的数字模式程序
- python - 如何将标记的关键字行和权重解构为关键字列
- reactjs - 如何强制打字稿检查解构的道具?
- jenkins - 用于创建拉取请求 ib Bit Bucket 的 Jenkins Pipeline delarative 代码
- visual-studio-code - 是否可以在扩展程序中创建虚拟编辑器
- python - 在字典中插入值的问题
- python - PyQt5:截图给出错误(xcb)
- pandas - ValueError:使用curve_fit()时,操作数无法与形状(38563,54)(38563,)一起广播
- powershell - 如何使用 Select-Object、Where-Object 在哈希表中获取正确的值
- c# - 无法读取大于 2gb 的视频文件