2016-10-21 2 views
6

다음 코드를 실행 한 후 x의 값은 무엇입니까?중첩 된 빈 루프 설명

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

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

대답은 이런 일이 발생하는 이유 누군가가 설명 할 수 C입니까? I가 2/3 반복을 이해하지만이되지 않은 이유에대로, 2로 1 일부터 갔다 방법을 이해하지 않습니다 [[],[]]

+4

이유를 아는 루프를 인쇄하십시오 –

+3

좀 더 구체적으로 질문의 이름을 변경 하시겠습니까? 나는 그것이 동일한 이슈를 찾고있는 동료 SO 사용자를 도울 것이라고 생각한다. – perlyking

답변

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] 

출력 :

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 그래, 왜 고생했는지 모르겠다. 그래도 고마워! – user2958503

3

단계를 수 있습니다 코드를 통해, 우리는

  • x = []을 ?:한다라는 빈 목록을 작성 x
  • for i in range(3) : 세 번 아래의 코드를 반복 :
    • x = [x + x]x의 현재 값, 플러스 x의 현재 값에 x의 가치를 재 할당하고 목록에서 그 포장.

기본적으로 각 반복을 무슨 일이 일어나고 있는지 당신의 목록이 한 단계 중첩되고, 목록 안에있는 목록이 현재 중첩 된 목록의 하위 목록이 될 것입니다.

가장 간단한 explantion은 다음과 같습니다. - for 루프의 각 반복에서 변수 x의 값은 중첩 된 두 개의 값으로 재 할당됩니다.이 중 하나는 두 개의 다른 중첩 된 목록을 포함 할 수 있습니다 목록. 여기서, 상기 그림이 너무 혼잡 한 경우

>>> # 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 
>>> 

짧은이다 : 여기서

for -loop의 각 반복에서, X의 값을 표시 한 도면이다

First iteration 
Value of x: [[]] 

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

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

또한 중첩 목록의 구조와 같은 트리를 만드는 것이 무엇이 더 좋은지 이해하는 데 도움이됩니다.

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

명확한 표현을 위해 여분의 공백을 사용했습니다.

처음 실행 :

x + x = [] + [] = []
빈 목록 + 빈리스트는 다른 빈 목록

그래서 [x + x] = [ [] ]
관심을입니다![[]]가 빈 목록이 아닙니다, 그것은 빈 목록

두 번째 실행 포함하는 목록입니다

x + x = [[]] + [[]] = [[], []]
그렇게 [x + x] = [ [[], []] ]

셋째 실행 :

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

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

+0

당신 말이 맞아요! 나는 그것을 다시 배열 할 것이다. 죄송합니다, 내 첫 번째 게시물입니다 ... – Pham

+2

아무 문제 남자. 당신을 응시하는 데 도움이되는 여기와 위로 투표;) –