涉及条件的python map函数(+ lambda)(如果)

Spi*_*uce 8 python lambda

我很好奇是否map()可以通过列表理解来完成我可以做的功能.

例如,请将此列表comp:

example_list = [x*2 for x in range(5) if x*2/6. != 1]
Run Code Online (Sandbox Code Playgroud)

显然,这给了我[0,2,4,8].

如何使用该map()功能制作等效的?这样做会给我一个语法错误.

example_map = map(lambda x:x*2 if x*2/6. != 1, range(5))
Run Code Online (Sandbox Code Playgroud)

只是想更好地理解如何使用这个功能.

jwo*_*der 7

你必须在列表map周围filter包围:

example_map = map(lambda x: x*2, filter(lambda x: x*2/6. != 1, range(5)))
Run Code Online (Sandbox Code Playgroud)


Ada*_*ith 5

或者,你可以filter你的map,而不是map荷兰国际集团的filter

example_map = filter(lambda x: x/6. != 1, map(lambda x: x*2, range(5)))
Run Code Online (Sandbox Code Playgroud)

只需记住,您现在正在过滤结果而不是原始结果(即lambda x: x/6. != 1lambda x: x*2/6. != 1因为x已从地图中翻倍,所以不再使用它)

哎呀,如果你真的想,你可以把它与一个条件表达式都在一起

example_map = map(lambda x: x*2 if x*2/6. != 1 else None, range(5))
Run Code Online (Sandbox Code Playgroud)

但这会让你失望[0, 2, 4, None, 8]filter(None, example_map)将删除Nones并按[0, 2, 4, 8]预期离开您。