如何在列表推导中定义变量?

时间:2016-08-18 11:07:48

标签: python list-comprehension

在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)]

3 个答案:

答案 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)]