在Haskell中,我可以做到
Prelude> [(y*3, y+4) | x<-[0..5], let y=x^2]
[(0,4),(3,5),(12,8),(27,13),(48,20),(75,29)]
Python中的等价物,不重复电源操作,正如我在
中所需要的那样>>> [((x**2)*3, (x**2)+4) for x in range(5)]
[(0, 4), (3, 5), (12, 8), (27, 13), (48, 20)]
我当然可以用lambda模拟Haskell代码,但这并不是非常Pythonic ...
>>> [(lambda y: (y*3, y+4))(x**2) for x in range(5)]
答案 0 :(得分:2)
您无法在理解中分配变量,但您可以使用嵌套的生成器表达式,它可以执行我认为您想要的(没有lambda函数)。
[(y*3, y+4) for y in (x**2 for x in range(5))]
答案 1 :(得分:1)
你不能这样做。赋值始终是Python中的一个语句;列表推导只能包含表达式。
答案 2 :(得分:1)
怎么样:
>>> [(x*3, x + 4) for x in map(lambda y: y**2, range(5))]
[(0, 4), (3, 5), (12, 8), (27, 13), (48, 20)]