2016-04-26 90 views
1

我有一個單詞列表。我想過濾掉沒有最小長度的單詞。我嘗試過濾器,但顯示一些錯誤。我的代碼是使用過濾器時將兩個參數傳遞給函數

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' 

回答

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

0

你不能那樣做。您需要傳遞一個已知最小長度的函數。

一個簡單的方法來做到這一點是使用lambda,而不是你的獨立功能:

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

當你輸入這個

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像其他的答案。

相關問題