在 Python3 的映射函数中排除空值
Exclude null values in map function of Python3
我正在使用 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]
。
当然,我可以用filter
来处理map
结果。但是有没有办法让map
直接return到我想要的结果呢?
不使用 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
得到你想要的结果。
map
无法直接过滤掉项目。它为每个输入项目输出一个项目。您可以使用列表综合从结果中过滤掉 None
。
r = [x for x in map(calc, range(1,10)) if x is not None]
(这只对范围内的每个数字调用一次 calc
。)
旁白:不用写lambda num: calc(num)
。如果你想要一个 returns calc
结果的函数,只需使用 calc
本身。
我正在使用 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]
。
当然,我可以用filter
来处理map
结果。但是有没有办法让map
直接return到我想要的结果呢?
不使用 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
得到你想要的结果。
map
无法直接过滤掉项目。它为每个输入项目输出一个项目。您可以使用列表综合从结果中过滤掉 None
。
r = [x for x in map(calc, range(1,10)) if x is not None]
(这只对范围内的每个数字调用一次 calc
。)
旁白:不用写lambda num: calc(num)
。如果你想要一个 returns calc
结果的函数,只需使用 calc
本身。