您的尝试有两个问题。
首先,你使用n+1
了代替i+1
,所以你将返回类似[5, 5, 5, 5]
代替的东西[1, 2, 3, 4]
。
其次,你不能循环for
一个数字n
,你需要循环某种序列,比如range(n)
。
所以:
def naturalNumbers(n):
return [i+1 for i in range(n)]
但是如果你已经有了这个range
功能,你就根本不需要这个了;return range(1, n+1)
正如 arshaji 所示,您可以。
那么,您将如何自己构建它?您没有要循环的序列,因此for
您必须自己构建它,而不是while
:
def naturalNumbers(n):
results = []
i = 1
while i <= n:
results.append(i)
i += 1
return results
当然,在实际代码中,您应该始终使用for
with a range
,而不是手动执行操作。事实上,即使对于这个练习,最好先编写自己的range
函数,然后将其用于naturalNumbers
. (已经很接近了。)
如果您想变得聪明,还有另一种选择。
如果你有一个列表,你可以把它切片。例如,前 5 个元素my_list
是my_list[:5]
。因此,如果您有一个以 开头的无限长列表1
,那将很容易。不幸的是,你不能有一个无限长的列表……但是你可以有一个迭代器,它可以很容易地模拟一个迭代器,无论是通过使用count
还是编写你自己的 2-liner 等效项。而且,虽然您不能对迭代器进行切片,但您可以使用islice
. 所以:
from itertools import count, islice
def naturalNumbers(n):
return list(islice(count(1), n))