2017-09-02 115 views
0

我是一名初學者,我必須實現一個代碼,使用地圖功能僅顯示從23到97的偶數。我被困在使用地圖功能僅顯示偶數

def evenfunc(num): 
    if num%2 == 0: 
     return num 
print map(evenfunc, range(23,98)) 

的輸出是[無,24個,無,26,無,28,無,30%,無,32,無,34,無,36,.... 97] 那麼如何擺脫沒有價值?

+1

你似乎混淆了'map()'和'filter()'。 – AChampion

+0

請注意,如果您希望生成的列表與原始列表的長度相同,那麼只應使用「map」。如果它們長度不同,'map'不是工作的工具;至少沒有以下'過濾器'。 – Carcigenicate

回答

0

你的問題是,你誤解了傳遞到map應該做的功能。傳遞到map的函數應修改現有輸入。 map地圖函數的結果給每個元素,創建一個新的迭代。 不是嘗試過濾它。

您需要使用filter相反,它是由專門篩選基於一個條件輸入:

filter(lambda x: x % 2 == 0, range(23, 98)) 

然而,列表理解會是一個更好的選擇:

[x for x in range(23, 98) if x % 2 == 0] 
0

試試這個:

def evenfunc(num): 
    if num%2 == 0: 
     return True 
print filter(evenfunc, range(23,98)) 
+0

這是'filter'的不正確用法。雖然你的代碼工作正常,但是傳入'filter'的函數應該爲每個給它的元素返回true或false。 –

+0

如果'返回True',如果'num = 0',那麼'num%2 == 0',但是你返回被視爲'False'的'0'。 – AChampion

+0

是的,謝謝指出。建議編輯。 –