马克·卢茨在他的书《学习Python》中举了一个例子:
>>> [(x,y) for x in range(5) if x%2==0 for y in range(5) if y%2==1]
[(0, 1), (0, 3), (2, 1), (2, 3), (4, 1), (4, 3)]
>>>
稍后,他指出尽管复杂且嵌套,但可以实现“映射和筛选等效”。 我找到的最接近的方法如下:
>>> list(map(lambda x:list(map(lambda y:(y,x),filter(lambda x:x%2==0,range(5)))), filter(lambda x:x%2==1,range(5))))
[[(0, 1), (2, 1), (4, 1)], [(0, 3), (2, 3), (4, 3)]]
>>>
元组的顺序是不同的,因此必须引入嵌套列表。我很好奇等价的内容是什么。
list(filter(lambda i:i[0]%2==0 and i[1]%2==1, map(lambda x:(x//5, x%5), range(25))))
算不算? - Aran-Fey