简体   繁体   English

使用for循环创建多个列表

[英]Using for loops to create multiple lists

Currently I have a function. 目前我有一个功能。

def create1(n): 

    output = []
    for i in range(n):
        output.append(int(i)+1)
    return output

It returns [1,2,3] whenever enter create(3). 每当输入create(3)时,它就会返回[1,2,3]。 However, I want it to return [[1],[1,2],[1,2,3]]. 但是,我希望它返回[[1],[1,2],[1,2,3]]。 I know there's a problem with something in my for loop but I can't figure it out. 我知道for循环中存在某些问题,但我无法解决。

Use range() to create lists of numbers quickly: 使用range()快速创建数字列表:

def create1(n): 
    output = []
    for i in range(n):
       output.append(range(1, i + 2))
    return output

or, using a list comprehension: 或者,使用列表推导:

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

If you are using Python 3, turn the iterator returned by range() into a list first: 如果您使用的是Python 3,请先将range()返回的迭代器转换为列表:

for i in range(n):
   output.append(list(range(1, i + 2)))

Quick demo: 快速演示:

>>> def create1(n): 
...     return [range(1, i + 2) for i in range(n)]
... 
>>> create1(3)
[[1], [1, 2], [1, 2, 3]]

This works in Python 2 and Python 3: 这适用于Python 2和Python 3:

>>> def create1(n):
...   return [list(range(1,i+1)) for i in range(1,n+1)]
...
>>> create1(5)
[[1], [1, 2], [1, 2, 3], [1, 2, 3, 4], [1, 2, 3, 4, 5]]

What you really want is a list appended at every stage. 您真正想要的是在每个阶段附加的列表。 So try this 所以试试这个

def create1(n): 
    output = []
    for i in range(n):
        output.append(range(1,i+2)) # append a list, not a number.
    return output

range(n) gives you a list of integers from 0 to n-1. range(n)为您提供从0到n-1的整数列表。 So, at each stage (at each i), you're appending to the output a list from 0 to i+1. 因此,在每个阶段(每个i),您都将一个从0到i + 1的列表追加到输出中。

Try this: 尝试这个:

def create(n):
    output = []
    for i in range(n):
        output.append(range(1,i+2))
    return output


print create(3)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM