3

This is my code:

a = [[]] * 10
a[0].append(1)
print a # Outputs [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]]

How can I get a to output

[[1], [], [], [], [], [], [], [], [], []]

?

4
  • 1
    docs.python.org/faq/… Commented Feb 19, 2012 at 20:17
  • 1
    Initialise a list to a specific length in Python Commented Feb 19, 2012 at 20:20
  • 1
    @PaoloMoretti: That's not the same question, although there are countless duplicates on SO. Commented Feb 19, 2012 at 20:39
  • @Wooble No, it's not, but the answer from Alex Martelli also answers this question. Commented Feb 19, 2012 at 20:45

3 Answers 3

12

Try

a=[[] for i in xrange(10)]

In your code you're adding the same list 10 times. The following output should clarify this:

>>> a=[[]] * 5
>>> for i in a: print id(i)
... 
155302636
155302636
155302636
155302636
155302636
>>> a=[[] for i in xrange(5)]
>>> for i in a: print id(i)
... 
155302668
155302732
155302924
155303020
155303052

As you can see, in the first example a contains 5 times a reference to the same array object, in the second example it contains references to 5 different array objects.

Sign up to request clarification or add additional context in comments.

Comments

3

Your current code creates an array containing the same array ten times.

Use [[] for i in xrange(10)] so you actually create separate arrays.

Comments

2

Try this:

>>> a = [[] for i in range(10)]
>>> a[0].append(1)
>>> a
[[1], [], [], [], [], [], [], [], [], []]

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.