Python - List returning [[…], 6] [duplicate]

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP












14
















This question already has an answer here:



  • What do ellipsis […] mean in a list?

    6 answers



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?










share|improve this question















marked as duplicate by Azat Ibrakov, jpp python
Users with the  python badge can single-handedly close python questions as duplicates and reopen them as needed.

StackExchange.ready(function()
if (StackExchange.options.isMobile) return;

$('.dupe-hammer-message-hover:not(.hover-bound)').each(function()
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');

$hover.hover(
function()
$hover.showInfoMessage('',
messageElement: $msg.clone().show(),
transient: false,
position: my: 'bottom left', at: 'top center', offsetTop: -7 ,
dismissable: false,
relativeToBody: true
);
,
function()
StackExchange.helpers.removeMessages();

);
);
);
Jan 17 at 12:11


This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.










  • 3





    Did you do any research? stackoverflow.com/questions/17160162/…

    – jonrsharpe
    Jan 6 at 15:34











  • Strangely I couldn't find that question from my searches, it seems to answer the question perfectly. The only question that remains unanswered is how does the for loop create such a list? @jonrsharpe

    – Ruler Of The World
    Jan 6 at 15:37











  • Because each step of the loop assigns the next element from x to x[0]. Those two loops are not the same.

    – jonrsharpe
    Jan 6 at 15:38
















14
















This question already has an answer here:



  • What do ellipsis […] mean in a list?

    6 answers



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?










share|improve this question















marked as duplicate by Azat Ibrakov, jpp python
Users with the  python badge can single-handedly close python questions as duplicates and reopen them as needed.

StackExchange.ready(function()
if (StackExchange.options.isMobile) return;

$('.dupe-hammer-message-hover:not(.hover-bound)').each(function()
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');

$hover.hover(
function()
$hover.showInfoMessage('',
messageElement: $msg.clone().show(),
transient: false,
position: my: 'bottom left', at: 'top center', offsetTop: -7 ,
dismissable: false,
relativeToBody: true
);
,
function()
StackExchange.helpers.removeMessages();

);
);
);
Jan 17 at 12:11


This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.










  • 3





    Did you do any research? stackoverflow.com/questions/17160162/…

    – jonrsharpe
    Jan 6 at 15:34











  • Strangely I couldn't find that question from my searches, it seems to answer the question perfectly. The only question that remains unanswered is how does the for loop create such a list? @jonrsharpe

    – Ruler Of The World
    Jan 6 at 15:37











  • Because each step of the loop assigns the next element from x to x[0]. Those two loops are not the same.

    – jonrsharpe
    Jan 6 at 15:38














14












14








14


3







This question already has an answer here:



  • What do ellipsis […] mean in a list?

    6 answers



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?










share|improve this question

















This question already has an answer here:



  • What do ellipsis […] mean in a list?

    6 answers



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?





This question already has an answer here:



  • What do ellipsis […] mean in a list?

    6 answers







python python-3.x






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Jan 8 at 13:48









Mad Physicist

35.3k156899




35.3k156899










asked Jan 6 at 15:33









Ruler Of The WorldRuler Of The World

517319




517319




marked as duplicate by Azat Ibrakov, jpp python
Users with the  python badge can single-handedly close python questions as duplicates and reopen them as needed.

StackExchange.ready(function()
if (StackExchange.options.isMobile) return;

$('.dupe-hammer-message-hover:not(.hover-bound)').each(function()
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');

$hover.hover(
function()
$hover.showInfoMessage('',
messageElement: $msg.clone().show(),
transient: false,
position: my: 'bottom left', at: 'top center', offsetTop: -7 ,
dismissable: false,
relativeToBody: true
);
,
function()
StackExchange.helpers.removeMessages();

);
);
);
Jan 17 at 12:11


This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.






marked as duplicate by Azat Ibrakov, jpp python
Users with the  python badge can single-handedly close python questions as duplicates and reopen them as needed.

StackExchange.ready(function()
if (StackExchange.options.isMobile) return;

$('.dupe-hammer-message-hover:not(.hover-bound)').each(function()
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');

$hover.hover(
function()
$hover.showInfoMessage('',
messageElement: $msg.clone().show(),
transient: false,
position: my: 'bottom left', at: 'top center', offsetTop: -7 ,
dismissable: false,
relativeToBody: true
);
,
function()
StackExchange.helpers.removeMessages();

);
);
);
Jan 17 at 12:11


This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.









  • 3





    Did you do any research? stackoverflow.com/questions/17160162/…

    – jonrsharpe
    Jan 6 at 15:34











  • Strangely I couldn't find that question from my searches, it seems to answer the question perfectly. The only question that remains unanswered is how does the for loop create such a list? @jonrsharpe

    – Ruler Of The World
    Jan 6 at 15:37











  • Because each step of the loop assigns the next element from x to x[0]. Those two loops are not the same.

    – jonrsharpe
    Jan 6 at 15:38













  • 3





    Did you do any research? stackoverflow.com/questions/17160162/…

    – jonrsharpe
    Jan 6 at 15:34











  • Strangely I couldn't find that question from my searches, it seems to answer the question perfectly. The only question that remains unanswered is how does the for loop create such a list? @jonrsharpe

    – Ruler Of The World
    Jan 6 at 15:37











  • Because each step of the loop assigns the next element from x to x[0]. Those two loops are not the same.

    – jonrsharpe
    Jan 6 at 15:38








3




3





Did you do any research? stackoverflow.com/questions/17160162/…

– jonrsharpe
Jan 6 at 15:34





Did you do any research? stackoverflow.com/questions/17160162/…

– jonrsharpe
Jan 6 at 15:34













Strangely I couldn't find that question from my searches, it seems to answer the question perfectly. The only question that remains unanswered is how does the for loop create such a list? @jonrsharpe

– Ruler Of The World
Jan 6 at 15:37





Strangely I couldn't find that question from my searches, it seems to answer the question perfectly. The only question that remains unanswered is how does the for loop create such a list? @jonrsharpe

– Ruler Of The World
Jan 6 at 15:37













Because each step of the loop assigns the next element from x to x[0]. Those two loops are not the same.

– jonrsharpe
Jan 6 at 15:38






Because each step of the loop assigns the next element from x to x[0]. Those two loops are not the same.

– jonrsharpe
Jan 6 at 15:38













2 Answers
2






active

oldest

votes


















10














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






share|improve this answer






























    5














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






    share|improve this answer

























    • Great answer, so the […] represents an infinite loop of the same list?

      – Ruler Of The World
      Jan 6 at 15:38











    • ... is the way to represent something that cycles.

      – Jean-François Fabre
      Jan 6 at 15:44

















    2 Answers
    2






    active

    oldest

    votes








    2 Answers
    2






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    10














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






    share|improve this answer



























      10














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






      share|improve this answer

























        10












        10








        10







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






        share|improve this answer













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







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Jan 6 at 15:42









        Mad PhysicistMad Physicist

        35.3k156899




        35.3k156899























            5














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






            share|improve this answer

























            • Great answer, so the […] represents an infinite loop of the same list?

              – Ruler Of The World
              Jan 6 at 15:38











            • ... is the way to represent something that cycles.

              – Jean-François Fabre
              Jan 6 at 15:44















            5














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






            share|improve this answer

























            • Great answer, so the […] represents an infinite loop of the same list?

              – Ruler Of The World
              Jan 6 at 15:38











            • ... is the way to represent something that cycles.

              – Jean-François Fabre
              Jan 6 at 15:44













            5












            5








            5







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






            share|improve this answer















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







            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited Jan 6 at 15:49

























            answered Jan 6 at 15:37









            Jean-François FabreJean-François Fabre

            102k954110




            102k954110












            • Great answer, so the […] represents an infinite loop of the same list?

              – Ruler Of The World
              Jan 6 at 15:38











            • ... is the way to represent something that cycles.

              – Jean-François Fabre
              Jan 6 at 15:44

















            • Great answer, so the […] represents an infinite loop of the same list?

              – Ruler Of The World
              Jan 6 at 15:38











            • ... is the way to represent something that cycles.

              – Jean-François Fabre
              Jan 6 at 15:44
















            Great answer, so the […] represents an infinite loop of the same list?

            – Ruler Of The World
            Jan 6 at 15:38





            Great answer, so the […] represents an infinite loop of the same list?

            – Ruler Of The World
            Jan 6 at 15:38













            ... is the way to represent something that cycles.

            – Jean-François Fabre
            Jan 6 at 15:44





            ... is the way to represent something that cycles.

            – Jean-François Fabre
            Jan 6 at 15:44


            Popular posts from this blog

            How to check contact read email or not when send email to Individual?

            Christian Cage

            How to properly install USB display driver for Fresco Logic FL2000DX on Ubuntu?