簡體   English   中英

在 python 中創建我自己的過濾器 function

[英]Creating my own filter function in python

I need to create my own filter function in python, ie, it should return the value from an iterable only if running any given function on it returns True or, if the function is None , if the iterable itself returns True . 我的問題是我無法使用只返回偶數的 function。

這是我的代碼:

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]))

任何幫助將不勝感激!

如果我理解正確,您正在嘗試傳遞一個 function ,它將返回所有的 arguments ?

如果是這種情況,如果您只傳遞 int arguments,而不是列表、元組或字符串,您可以輕松地做到這一點。

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 function 添加一些額外的 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

如果您提供 function 的代碼會更好

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM