我必须生成一个这样的列表:
[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)])
是否有更清晰,更直接的方法来生成序列?
答案 0 :(得分:9)
这些似乎是前几个pronic numbers。也就是说,一个数字是两个连续整数n * (n + 1)
的乘积。
我通过搜索OEIS找到了这个。使用列表解析生成它们很简单:
>>> [x*(x + 1) for x in range(10)]
[0, 2, 6, 12, 20, 30, 42, 56, 72, 90]
答案 1 :(得分:2)
正如@wim已经指出的那样,你的算法是“pronic数字”,可归纳为:
n
- th pronic数是第一个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
答案 2 :(得分:0)
list1 = [x+(x ** 2) for x in range(10)]
print list1
Output : [0, 2, 6, 12, 20, 30, 42, 56, 72, 90]
这将为您提供您所要求的系列。