生成这个数字序列的更清晰方法是什么?
我需要生成一个像这样的列表:
[0, 2, 6, 12, 20, 30, 42, 56, 72, 90]
这是我现在的代码
g = lambda x: x + g(x - 2) if x > 0 else 0
print([g(2 * i) for i in range(10)])
有没有更简单、更直接的方法来生成这个序列呢?
3 个回答
0
list1 = [x+(x ** 2) for x in range(10)]
print list1
Output : [0, 2, 6, 12, 20, 30, 42, 56, 72, 90]
这段代码会给你想要的序列。
2
你的算法,正如 @wim 已经指出的,是用来计算“乘积数”的,可以简单总结为:
第
n
个乘积数是前n
个偶数的和
所以你可以这样写:
def pronic(n):
"""Create a list of the first n pronic numbers."""
return [sum(range(0, 2*i+1, 2)) for i in range(n)]
不过,虽然这段代码清楚地展示了你采用的方法,但另一种定义可以让它变得更简洁,正如 @wim 的回答所示。
你也可以考虑把它实现成一个生成器:
def pronic():
"""Generate the pronic numbers."""
i = 0
while True:
yield i * (i + 1)
i += 1