2016-10-21 14 views
6

Jaka jest wartość x po wykonaniu następującego kodu?Objaśnienie pustej pętli

x = [] 
for i in range(3): 
    x = [x + x] 

A.[[[[]]]]. 
B.[[[],[]]]. 
C.[[[[],[]],[[],[]]]]. 
D.[[],[],[],[],[],[]] 

Odpowiedź jest c, może ktoś wyjaśnić, dlaczego tak się dzieje? Rozumiem 2/3 iteracji, ale nie rozumiem, jak to poszło od 1 do 2, podobnie jak w dlaczego nie stać [[],[]]

+4

wydrukuj x w pętli, aby wiedzieć, dlaczego –

+3

Czy rozważasz zmianę nazwy swojego pytania, aby było ono bardziej szczegółowe? Myślę, że pomoże to innym użytkownikom SO, którzy szukają tego samego problemu. – perlyking

Odpowiedz

8
x = [] 
for i in range(3): 
    print('\ni =', i) 
    print('x =' , x) 
    print('x + x =', x + x) 
    print('[x + x] =', [x + x]) 
    x = [x + x] 

wyjściowa:

i = 0 
x = [] 
x + x = [] # Here is why. If you extend [] by [], you get []. 
[x + x] = [[]] # And we wrap the result. 

i = 1 
x = [[]] 
x + x = [[], []] 
[x + x] = [[[], []]] 

i = 2 
x = [[[], []]] 
x + x = [[[], []], [[], []]] 
[x + x] = [[[[], []], [[], []]]] 
+1

ooooooh ok dzięki, nie wiem, dlaczego miałem problemy. w każdym razie dzięki! – user2958503

3

Pozwala krok za pomocą kodu, będziemy ?:

  • x = []: Utwórz pustą listę o nazwie x
  • for i in range(3): powtórz poniższy kod trzy razy:
    • x = [x + x] przypisać wartość x do bieżącej wartości x plus bieżącej wartości x i owinąć że na liście.

Zasadniczo, co dzieje się w każdej iteracji jest to, że lista jest zagnieżdżony o jeden poziom, a lista wewnątrz listy aktualnie stać sub lista tej listy zagnieżdżone.

W kategoriach laika najprostszym wyjaśnieniem byłoby: - ​​W każdej iteracji pętli for wartość zmiennej x jest ponownie przypisywana do wartości dwóch zagnieżdżonych, które mogą zawierać także dwie inne zagnieżdżone listy, w pojedynczym lista.

Oto ilustracja pokazać wartość x na każdej iteracji for -loop:

>>> # x is empty 
>>> x = [] 
>>> 
>>> # 1st iteration 
>>> x = [x + x] 
>>> # x 
>>> x 
[[]] # your list is nested by one level 
>>> 
>>> # 2nd iteration 
>>> x = [x + x] 
>>> # x 
>>> x 
[[[], []]] # your list is nested by three levels 
>>> # 3rd iteration 
>>> x = [x + x] 
>>> # x 
>>> x 
[[[[], []], [[], []]]] # your list is nested by four levels 
>>> 

Jeśli powyższa ilustracja jest zbyt zatłoczone, tutaj jest krótszy:

First iteration 
Value of x: [[]] 

Second iteration 
Value of x: [[[], []]] 

Third iteration 
Value of x: [[[[], []], [[], []]]] 

Znajduję również tworzenie struktury drzewa z listy zagnieżdżonej, pomaga zrozumieć, co się dzieje lepiej:

[ # 1st level 
    [ # second level 
     [ # third level 
      [], # fourth level 
      [] 
     ], 
     [ 
      [], 
      [] # fourth level 
     ] # third level 
    ] # second level 
] # 1st level 
14

Użyłem dodatkowych spacji dla wyraźnego wyrażenia.

First Run:

x + x = [] + [] = []
pusta lista + pusta lista to kolejna pusta lista

tak [x + x] = [ [] ]
uwaga![[]] nie jest pusta lista, to lista zawierająca pustą listę

Second Run:

x + x = [[]] + [[]] = [[], []]
tak [x + x] = [ [[], []] ]

trzecie Run:

x + x = [[[], []]] + [[[], []]] = [[[[], []]], [[[], []]]]

czyli [x + x] = [ [[[[], []]], [[[], []]]] ]

+0

masz rację! Przestawię to. Przepraszamy za to, jest to mój pierwszy post ... – Pham

+2

Bez problemu człowiek. tu i wyżej głosuj, aby pomóc Ci się gapić;) –