我很好奇是否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)
只是想更好地理解如何使用这个功能.
你必须在列表map周围filter包围:
example_map = map(lambda x: x*2, filter(lambda x: x*2/6. != 1, range(5)))
Run Code Online (Sandbox Code Playgroud)
或者,你可以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. != 1,lambda 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]预期离开您。
| 归档时间: |
|
| 查看次数: |
7099 次 |
| 最近记录: |