user3000645
user3000645

Reputation: 17

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). However, I want it to return [[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.

Upvotes: 0

Views: 1874

Answers (4)

slider
slider

Reputation: 12990

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. So, at each stage (at each i), you're appending to the output a list from 0 to i+1.

Upvotes: 0

Mark Tolonen
Mark Tolonen

Reputation: 177406

This works in Python 2 and 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]]

Upvotes: 3

Sweeney Todd
Sweeney Todd

Reputation: 880

Try this:

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


print create(3)

Upvotes: 0

Martijn Pieters
Martijn Pieters

Reputation: 1121226

Use range() to create lists of numbers quickly:

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:

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

Upvotes: 4

Related Questions