Python list filtering with arguments

不羁的心 提交于 2020-03-17 07:47:41

问题


Is there a way in python to call filter on a list where the filtering function has a number of arguments bound during the call. For example is there a way to do something like this:

>> def foo(a,b,c):
    return a < b and b < c

>> myList = (1,2,3,4,5,6)

>> filter(foo(a=1,c=4),myList)
>> (2,3)

This is to say is there a way to call foo such that a=1, c=4, and b gets bound to the values in myList?


回答1:


You can create a closure for this purpose:

def makefilter(a, c):
   def myfilter(x):
       return a < x < c
   return myfilter

filter14 = makefilter(1, 4)

myList = [1, 2, 3, 4, 5, 6]
filter(filter14, myList)
>>> [2, 3]



回答2:


One approach is to use lambda:

>>> def foo(a, b, c):
...     return a < b and b < c
... 
>>> myTuple = (1, 2, 3, 4, 5, 6)
>>> filter(lambda x: foo(1, x, 4), myTuple)
(2, 3)

Another is to use partial:

>>> from functools import partial
>>> filter(partial(foo, 1, c=4), myTuple)
(2, 3)



回答3:


def foo(a,c):
    return lambda b : a < b and b < c

myList = (1,2,3,4,5,6)

g = filter(foo(1,4),myList)


来源:https://stackoverflow.com/questions/7045754/python-list-filtering-with-arguments

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!