Python - List returning [[...], 6]

that's because you're using x[0] as your loop variable (which is bad practice) which exists as a list and not a new name like you're supposed to when iterating with for

for x[0] in data:
    print(x)

and x is in data so there's a cyclic reference (hence the ellipsis representation to avoid infinite recursion when printing the same data over and over)

More in detail:

The ellipsis happens on the last element because of the previous loop that binds x on the last element of data ([5,6]).

So the second loop assigns [5,6] to x[0] but it's also x. On way to get rid of this is to create a copy of x just before the second loop: x = x[:]


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 [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[...