Python list filtering with arguments
29,066
Solution 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]
Solution 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)
Author by
kscottz
Director of R&D at Ingenuitas. Specializes in computer vision, graphics, and augmented reality. Former Defense Contractor / Boffin. Columbia University CS graduate student and University of Michigan engineering alum.
Updated on May 20, 2020Comments
-
kscottz almost 4 years
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?