【问题标题】:Python: Creating a filter functionPython:创建过滤器函数
【发布时间】:2011-12-31 21:20:04
【问题描述】:

我正在尝试创建一个函数:

filter(delete,lst) 

当有人输入时:

filter(1,[1,2,1]) 

返回[2]

我想出的是使用 list.remove 函数,但它只删除第一个 delete 实例。

def filter(delete, lst):

"""

Removes the value or string of delete from the list lst

"""

   list(lst)

   lst.remove(delete)

   print lst

我的结果:

filter(1,[1,2,1])

返回[2,1]

【问题讨论】:

标签: python list function


【解决方案1】:

尝试使用列表推导:

def filt(delete, lst):
    return [x for x in lst if x != delete]

或者,使用内置过滤功能:

def filt(delete, lst):
    return filter(lambda x: x != delete, lst)

最好不要为您的函数使用名称filter,因为它与上面使用的内置函数名称相同

【讨论】:

  • +1。我只想补充一点,最好不要使用filter 作为名称,因为它已经是内置的。
  • 感谢您的回答。而我将我的函数称为“过滤器”的原因是应我的老师在这项作业中的要求。
  • HighAllegiant :在这些情况下,将 Homework 标签添加到您的问题中。给你答案绝对没有帮助。
  • 在这个问题和你的另一个问题之间,在我看来,你的导师一心想让人们无缘无故地用困难的方式解决简单的问题。 :(
【解决方案2】:

我喜欢 Óscar López 的回答,但您也应该学习使用现有的 Python filter 函数:

>>> def myfilter(tgt, seq):
        return filter(lambda x: x!=tgt, seq)

>>> myfilter(1, [1,2,1])
[2]

【讨论】:

    【解决方案3】:

    自定义过滤功能

    def my_filter(func,sequence):
        res=[]
        for variable in sequence :
            if func(variable):
                res.append(variable)
        return res
    
    def is_even(item):
        if item%2==0 :
            return True
        else :
            return False
     
        
    
    seq=[1,2,3,4,5,6,7,8,9,10]
    print(my_filter(is_even,seq))
    

    【讨论】:

    • 输出将是[2, 4, 6, 8, 10]。这里is_even和func的地址是一样的。
    【解决方案4】:

    python中的自定义过滤功能:

    def myfilter(fun, data):
        return [i for i in data if fun(i)]
    

    【讨论】:

      猜你喜欢
      • 2022-12-01
      • 2020-09-20
      • 1970-01-01
      • 2013-05-06
      • 2019-06-07
      • 1970-01-01
      • 2022-11-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多