使用过滤器

时间:2016-04-26 11:40:38

标签: python function filter arguments

我有一个单词列表。我想过滤掉没有最小长度的单词。我尝试过滤,但显示出一些错误。我的代码是

def words_to_integer(x,y):
          return len(x)> y


print("enter the list of words : ")
listofwords =  [ str(x)  for x in input().split()]  #list of words 
minimumlength = print("enter the length ")          
z = list(filter(words_to_integer,(listofwords,minimumlength)))

print("words with length greater than ",minimumlength ,"are" ,z )

错误是

 z = list(filter(words_to_integer,(listofwords,minimumlength)))
 TypeError: words_to_integer() missing 1 required positional argument: 'y'

3 个答案:

答案 0 :(得分:2)

你应该看看functools.partial

from functools import partial

z = filter(partial(words_to_integer, y=minimumlength), listofwords)

partial(words_to_integer, y=minimumlength)words_to_integer功能相同,但参数y固定为minimumlength

答案 1 :(得分:0)

你不能这样做。您需要传递一个已知道最小长度的函数。

执行此操作的一种简单方法是使用lambda而不是独立函数:

filter(lambda x: len(x) > minimumlength, listofwords)

答案 2 :(得分:0)

键入此内容

list(filter(words_to_integer,(listofwords,minimumlength)))

python试图做这样的事情:

z = []
if words_to_integer(listofwords):
    z.append(listofwords)
if words_to_integer(minimumlength):
    z.append(minimumlength)

会失败,因为words_to_integer接受2个参数,但只给出了一个参数。

你可能想要这样的东西:

z = []
for word in listofwords:
    if words_to_integer(word):
        z.append(word)

使用filter看起来像这样:

z = list(filter(lambda word: words_to_integer(word, minimumlength), listofwords))

或在其他答案中使用partial