Sta*_*cyM 6 python for-loop list
我正在学习这个在线 Python 课程并试图解决以下称为编码练习的问题:很自然:
编写一个函数 naturalNumbers,它接受一个正整数 n 作为输入,并返回一个由前 n 个自然数组成的列表 [1, 2, ...]。
我什至需要一个 for 循环来创建一个列表吗?这是我的代码(显然不起作用)。请记住,他们没有教过列表理解。我在 stackoverflow 上发现了这个概念。
def naturalNumbers(n):
list = [n+1 for i in n]
return list
Run Code Online (Sandbox Code Playgroud)
我是否应该采取另一种方法,创建多个 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)]
Run Code Online (Sandbox Code Playgroud)
但是如果你已经有了这个range功能,你就根本不需要这个;你可以return range(1, n+1),正如阿尔沙吉所展示的那样。
那么,你将如何自己构建它?您没有要循环的序列,因此for您必须使用while以下命令自己构建它:
def naturalNumbers(n):
results = []
i = 1
while i <= n:
results.append(i)
i += 1
return results
Run Code Online (Sandbox Code Playgroud)
当然,在现实生活中的代码中,您应该始终使用forwith 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))
Run Code Online (Sandbox Code Playgroud)
我是否需要 for 循环来创建列表?
不,您可以(并且在一般情况下应该)使用内置函数range():
>>> range(1,5)
[1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
IE
def naturalNumbers(n):
return range(1, n + 1)
Run Code Online (Sandbox Code Playgroud)
Python 3range()略有不同,它返回一个range对象而不是列表,因此如果您使用 3.x,请将其全部包装在list():中list(range(1, n + 1))。
| 归档时间: |
|
| 查看次数: |
103744 次 |
| 最近记录: |