2016-10-21 2 views
6

Каково значение x после выполнения следующего кода?Вложенная пустая строка:

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

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

Ответ с, может кто-нибудь объяснить, почему это происходит? Я понимаю, что 2/3 итерации, но не понимаю, как это пошло от 1-го до 2-го, а в том, почему он не стал [[],[]]

+4

Распечатать x в цикле, чтобы узнать, почему –

+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 okay спасибо, не знаю, почему у меня были проблемы. Спасибо хоть! – user2958503

3

Позволяет шаг через код, мы будем ?:

  • x = []: Создать пустой список под названием x
  • for i in range(3): повторить этот код три раза:
    • x = [x + x] переназначить значение x к текущему значению x, а также текущему значению x и завернуть, что в списке.

По сути, то, что происходит каждую итерацию, что ваш список вложен на одном уровне, а список в списке в настоящее время становятся суб список этого вложенного списка.

В простейших словах простейшее объяснение было бы - На каждой итерации цикла for значение переменной x присваивается значению двух вложенных, которые также могут содержать два других вложенных списка, внутри одного список.

Ниже приводится пример, чтобы показать значение х на каждой итерации 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 
>>> 

Если выше иллюстрация является слишком тесно, здесь более короткий:

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] = [ [] ]
внимание![[]] не пустой список, это список, содержащий пустой список

Второй Run:

x + x = [[]] + [[]] = [[], []]
так [x + x] = [ [[], []] ]

Третий Run:

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

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

+0

Вы правы! Я его перестрою. Извините за это, это мой первый пост ... – Pham

+2

Без проблем человек. вот и голосуйте, чтобы помочь вам смотреть;) –