首页 > 解决方案 > Python,高阶函数,范围问题,我不能在返回列表之前重置它

问题描述

我正在尝试设计一个抽象函数,该函数根据谓词过滤通用类型 X (listofX) 的列表,并将该谓词作为函数 (fn) 传递

当我第一次调用我的函数时,它会按照我的意图成功, 之后它会保留答案并附加在它上面。

def positive(x):
    return x>0

def negative(x):
    return x<0

#PROBLEM# i CAN NOT reset filtered_list
def filter2(fn, listofX, i=0, filtered_list = []):
    if i == len(listofX)-1:
        return filtered_list
    if fn(listofX[i]):
        filtered_list.append(listofX[i])
    i += 1
    return filter2(fn, listofX, i)

numbers = [3 ,-2, -8, 4, -1, 2, 0]
print(filter2(positive, numbers)) #[3, 4, 2]
print(filter2(negative, numbers)) #[3, 4, 2, -2, -8, -1]

我尝试解决的一种方法是每次从 i=0 重新开始,我重置列表但它对我不起作用:


def filter2(fn, listofX, i=0, filtered_list = []):
    if i == 0:
        filtered_list = []
    if i == len(listofX)-1:
        return filtered_list
    if listofX[i] > 0:
        filtered_list.append(listofX[i])
    i += 1
    return filter2(fn, listofX, i)

numbers = [3 ,-2, -8, 4, -1, 2, 0]
print(filter2(positive, numbers)) #[3, 4, 2]
print(filter2(negative, numbers)) #[3, 4, 2, -2, -8, -1]

有什么帮助吗?我想在这里处理什么概念?

标签: python

解决方案


推荐阅读