2011-08-12 50 views
13

python有沒有一種方法可以在過濾函數在調用過程中綁定多個參數的列表上調用過濾器。例如有沒有辦法做這樣的事情:帶參數的Python列表過濾

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

這是說的是有沒有辦法來調用foo到α= 1,C = 4,和b被綁定到myList中值是多少?

回答

14

您可以爲此創建一個封閉:

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

一種方法是使用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) 

另一種是使用partial

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

+ 1爲lambda。而且,如果你想使用不帶參數的lambda,只需使用'filter(lambda:foo(1,4),myTuple)'。 –

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