【问题标题】:Creating my own filter function in python在 python 中创建我自己的过滤器函数
【发布时间】:2020-09-20 02:05:40
【问题描述】:

我需要在 python 中创建自己的过滤器函数,即,只有在其上运行任何给定函数返回 True 或者,如果函数是 None,它应该从可迭代对象返回值,如果可迭代对象本身返回True。我的问题是我无法使用只返回偶数的函数。

这是我的代码:

def my_own_filter(func, *iterable):
    l = []
    if func is None:
        for i in iterable:
            if i:
                l.append(i)
    else:
        for i in iterable:
            if func(i):
                l.append(i)
    return(l)


print(my_own_filter(None, 1, 0, -1, (), "hello", 1, 2, 3, 4))
print(my_own_filter(sum, (1, 2, 3), [], [3, 4, 5]))

任何帮助将不胜感激!

【问题讨论】:

  • 您遇到了什么错误?在您的示例中,您将 None 传递给您的 func 显然不会只返回偶数...
  • @acushner ,这不是 python 错误,它更像是一个逻辑错误。我添加了一个调用示例,其中 func 不是 None。

标签: python python-3.x function filter iterable


【解决方案1】:

如果我理解正确,您是在尝试传递一个函数,该函数将返回所有偶数的参数?

如果是这种情况,如果只传递 int 参数,而不是列表、元组或字符串,则可以轻松做到这一点。

def isEven(x):
    if x % 2 == 0:
        return True
    else:
        return False
print(my_own_filter(isEven, 1, 0, -1, 1, 2, 3, 4))

为了使其适用于所有类型,您必须向 my_own_filter 函数添加一些额外的 if 语句。使用isinstance function,您可以确定是否需要使用 for 循环来循环遍历列表或元组内的所有对象。

这是我想出的让列表和元组工作的方法:

def my_own_filter(func, *iterable):
    l = []
    if func is None:
        for i in iterable:
            if i:
                l.append(i)
    else:
        for i in iterable:
            if isinstance(i, int) and isEven(i):
                l.append(i)
            elif isinstance(i, list) or isinstance(i, tuple):
                for x in i:
                    if isEven(x):
                        l.append(x)    
    return(l)

def isEven(x):
    if x % 2 == 0:
        return True
    else:
        return False

【讨论】:

    【解决方案2】:

    如果你提供你的函数代码会更好

    【讨论】:

    • 这应该是一条评论
    猜你喜欢
    • 2011-12-31
    • 2016-01-28
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多