在Python3的map函数中排除空值

时间:2018-07-05 11:03:37

标签: python python-3.x

我正在使用map处理Python3.6的列表:

def calc(num):
    if num > 5:
        return None
    return num * 2


r = map(lambda num: clac(num), range(1, 10))
print(list(r))

# => [2, 4, 6, 8, 10, None, None, None, None]

我期望的结果是:[2、4、6、8、10]。

当然,我可以使用过滤器来处理地图结果。但是map是否可以直接返回我想要的结果?

2 个答案:

答案 0 :(得分:4)

@{string test = "test";}无法直接过滤掉项目。每输入一项输出一项。您可以使用列表理解来从结果中过滤出map

None

(这只会在范围内的每个数字上调用一次r = [x for x in map(calc, range(1,10)) if x is not None] 。)

此外:无需编写calc。如果您想要一个返回lambda num: calc(num)结果的函数,只需使用calc本身。

答案 1 :(得分:0)

不是单独使用map时,但是您可以将map()的调用更改为:

r = [calc(num) for num in range(1, 10) if calc(num) is not None]
print(r)  # no need to wrap in list() anymore

获得所需的结果。