创建如图所示的列表的一种相对直接的方法是通过:
[i for i in range(1,n+1) for j in range(i)]
其中 n
是出现在列表中的最大数。以上方法与几个先前提出的答案相同,但表达更为简洁。
到目前为止,所有提到的方法的替代方法是注意到列表的第 i
个元素近似等于 2*i
的平方根的整数部分。稍加调整,可以制作出一个相当简单的生成器,如下所示。
def gen_nnlist(nmax):
n = 1
while n < nmax*(nmax+1):
yield int(n**.5+.5)
n += 2
以下是在 Python 2.7.3 解释器中运行代码的一些示例输出:
>>> print [i for i in gen_nnlist(4)]
[1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
>>> print [i for i in gen_nnlist(6)]
[1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6]
>>> fun = gen_nnlist(3)
>>> for i in fun: print i
...
1
2
2
3
3
3
>>>
f(2) -> [1, 2, 2]
吗? - Useless