我是一名初学者,我必须实现一个代码,使用地图功能仅显示从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] 那么如何摆脱没有价值?
我是一名初学者,我必须实现一个代码,使用地图功能仅显示从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] 那么如何摆脱没有价值?
你的问题是,你误解了传递到map
应该做的功能。传递到map
的函数应修改现有输入。 map
地图函数的结果给每个元素,创建一个新的迭代。 不是尝试过滤它。
您需要使用filter
相反,它是由专门筛选基于一个条件输入:
filter(lambda x: x % 2 == 0, range(23, 98))
然而,列表理解会是一个更好的选择:
[x for x in range(23, 98) if x % 2 == 0]
试试这个:
def evenfunc(num):
if num%2 == 0:
return True
print filter(evenfunc, range(23,98))
这是'filter'的不正确用法。虽然你的代码工作正常,但是传入'filter'的函数应该为每个给它的元素返回true或false。 –
如果'返回True',如果'num = 0',那么'num%2 == 0',但是你返回被视为'False'的'0'。 – AChampion
是的,谢谢指出。建议编辑。 –
你似乎混淆了'map()'和'filter()'。 – AChampion
请注意,如果您希望生成的列表与原始列表的长度相同,那么只应使用“map”。如果它们长度不同,'map'不是工作的工具;至少没有以下'过滤器'。 – Carcigenicate