使用过滤器时将两个参数传递给函数
问题描述:
我有一个单词列表。我想过滤掉没有最小长度的单词。我尝试过滤器,但显示一些错误。我的代码是使用过滤器时将两个参数传递给函数
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'
答
你应该看看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
。
答
你不能那样做。您需要传递一个已知最小长度的函数。
一个简单的方法来做到这一点是使用lambda,而不是你的独立功能:
filter(lambda x: len(x) > minimumlength, listofwords)
答
当你输入这个
list(filter(words_to_integer,(listofwords,minimumlength)))
蟒蛇试图做这样的事情:
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
像其他的答案。