2017-09-02 118 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

是的,谢谢指出。建议编辑。 –