Python - 使用for循环构建/创建列表

时间:2013-09-11 22:13:05

标签: python list for-loop

I'm taking this online Python course并尝试解决以下称为编码练习的问题:它是自然的:

  

编写一个函数naturalNumbers,它以正整数n作为输入,并返回由前n个自然数组成的列表[1,2,...]。

我甚至需要一个for循环来创建列表吗?这是我的代码(显然不起作用)。请记住,他们没有教过列表理解。我在stackoverflow上找到了这个概念。

def naturalNumbers(n):
   list = [n+1 for i in n]
   return list

我应该采用另一种方法来创建1,2,3 ... n的多个列表并将它们连接在一起,如[1] + [2] + [3] ......

3 个答案:

答案 0 :(得分:4)

  

我是否需要for循环来创建列表?

不,您可以(通常情况下应该)使用内置函数range()

>>> range(1,5)
[1, 2, 3, 4]

def naturalNumbers(n):
    return range(1, n + 1)

Python 3's range()略有不同,因为它返回range个对象而不是列表,所以如果你使用3.x将它全部包装在list()中:{{1} }。

答案 1 :(得分: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功能,则根本不需要此功能;正如阿尔沙基所示,你可以return range(1, n+1)

那么,你将如何建立自己?您没有要循环的序列,因此您必须使用for自行构建它而不是while

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)))

答案 2 :(得分:3)

以下是从1开始创建具有N个连续自然数的列表的几种方法。

1范围:

def numbers(n): 
    return range(1, n+1);

2名单理解:

def numbers(n):
    return [i for i in range(1, n+1)]

你可能想要研究方法xrange和生成器的概念,这些在python中很有趣。祝你学习顺利!