I'm taking this online Python course并尝试解决以下称为编码练习的问题:这很自然:
Write a function naturalNumbers which takes a positive integer n as input, and returns a list [1, 2, ...] consisting of the first n natural numbers.
我什至需要 for 循环来创建列表吗?这是我的代码(显然不起作用)。请记住,他们没有教列表理解。我在 stackoverflow 上发现了这个概念。
def naturalNumbers(n):
list = [n+1 for i in n]
return list
我是否应该采用另一种方法,即创建多个 1,2,3...n 列表并将它们连接在一起,例如 [1] + [2] + [3]...
最佳答案
您的尝试有两个问题。
首先,您使用了 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
函数,你根本不需要这个;正如 arshaji 所示,您可以return range(1, n+1)
。
那么,您将如何自己构建它?您没有要循环的序列,因此您必须使用 while
自己构建它,而不是 for
:
def naturalNumbers(n):
results = []
i = 1
while i <= n:
results.append(i)
i += 1
return results
当然,在实际代码中,您应该始终将for
与range
一起使用,而不是手动执行操作。事实上,即使对于本练习,最好先编写您自己的 range
函数,仅用于 naturalNumbers
。 (已经很接近了。)
如果您想变聪明,还有一种选择。
如果你有一个列表,你可以将它切片。例如,my_list
的前 5 个元素是 my_list[:5]
。因此,如果您有一个以 1
开头的无限长列表,那将很容易。不幸的是,你不能有一个无限长的列表……但是你可以有一个很容易模拟一个的迭代器,要么使用count
。或者编写你自己的 2-liner 等价物。而且,虽然你不能对迭代器进行切片,但你可以用 islice
做同样的事情。 .所以:
from itertools import count, islice
def naturalNumbers(n):
return list(islice(count(1), n))
关于python - 如何编写一个接受正整数 N 并返回前 N 个自然数的列表的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18752171/