python - 如何编写一个接受正整数 N 并返回前 N 个自然数的列表的函数

标签 python list for-loop

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

当然,在实际代码中,您应该始终将forrange 一起使用,而不是手动执行操作。事实上,即使对于本练习,最好先编写您自己的 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/

相关文章:

python - 如何使用生物服务在不指定生物体的情况下访问 KEGG 条目?

Python:类名中的双冒号

r - 根据日期键对多个 R 列表的值求和

php - PHP for循环无法正常工作

python - 请求的运行时 (ÿþpython-3.6.5) 在 Heroku 上不适用于此堆栈

python - 有没有办法强制 lxml 解析在标签中指定编码的 Unicode 字符串?

列表重新格式化中的 Python 列表

string - Ocaml - 字符串到 (int*int*int) 列表

c++ - 了解 C++ 中循环的简写形式

python - 'Int' 对象不可迭代。但是,它是一个字符串