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












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.5k156899




35.5k156899










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


















11














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









    11














    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




























      11














      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


























        11












        11








        11







        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.5k156899




        35.5k156899

























            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

            102k954111




            102k954111













            • 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

            Probability when a professor distributes a quiz and homework assignment to a class of n students.

            Aardman Animations

            Are they similar matrix