Python – List returning [[…], 6]

  • A+
Category:Languages

If I run the following code

data = [[1,2],[3,4],[5,6]]  for x in data:     print(x[0])  for x[0] in data:     print(x) 

I get the following output

1 3 5  [[1, 2], 6] [[3, 4], 6] [[...], 6] 

I end up with a list containing [[...], 6], but what is this [...] list?

It doesn't behave normally, because calling y = [[...], 6] and then the following statements show [...] to be 0

>>> print(y) [[Ellipsis], 6]  >>> print(y[0]) [0] 

However when I run the code at the top, and type the following statements the results don't make sense:

>>> print(x) [[...], 6]  >>> print(x[0]) [[...], 6]  >>> print(x[0][0]) [[...], 6]  >>> print(x[0][0][0]) [[...], 6] 

and yet somehow both of these result in 6

>>> print(x[1]) 6  >>> print(x[0][1]) 6 

To review the question: How is this possible, and what does [...] represent, and how can the for loop at the top create such a list?

 


Let's give your sublists names:

a = [1, 2] b = [3, 4] c = [5, 6] data = [a, b, c] 

Your first loop binds a, b and c successively to x. When the loop terminates, you have effectively set x = c.

The second loop now binds a, b and c successively to x[0]. This is fine for a and b, but for c you are effectively doing c[0] = c, creating a circular reference. Since list is able to catch that, it won't try to print [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[...

Comment

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: