Позволяет шаг через код, мы будем ?:
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
Распечатать x в цикле, чтобы узнать, почему –
Вы считаете, что переименование вашего вопроса так, чтобы оно было более конкретным? Я думаю, что это поможет другим пользователям SO, которые ищут ту же проблему. – perlyking