web-dev-qa-db-ja.com

Python引数付きのリストフィルタリング

pythonで、フィルタリング関数が呼び出し中にバインドされた多数の引数を持つリストでfilterを呼び出す方法はありますか?たとえば、次のような方法はありますか?

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

つまり、a = 1、c = 4、bがmyListの値にバインドされるようにfooを呼び出す方法はありますか?

24
kscottz

この目的のためにクロージャを作成できます。

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
Zaur Nasibov

1つのアプローチは、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)

もう1つは、 partial を使用することです。

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