#python
#python
Вопрос:
Каково значение x
после выполнения следующего кода?
x = []
for i in range(3):
x = [x x]
A.[[[[]]]].
B.[[[],[]]].
C.[[[[],[]],[[],[]]]].
D.[[],[],[],[],[],[]]
Ответ — c, кто-нибудь может объяснить, почему это происходит? Я понимаю 2/3 итерации, но не понимаю, как она перешла с 1-й на 2-ю, например, почему она не стала [[],[]]
Комментарии:
1. выведите x в цикле, чтобы узнать, почему
2. Не могли бы вы переименовать свой вопрос, чтобы он был немного более конкретным? Я думаю, это поможет другим пользователям SO, которые ищут ту же проблему.
Ответ №1:
Я использовал дополнительные пробелы для четкого выражения.
Первый запуск :
x x = [] [] = []
пустой список пустой список — это еще один пустой список
итак [x x] = [ [] ]
внимание! [[]]
это не пустой список, это список, содержащий пустой список
Второй запуск:
x x = [[]] [[]] = [[], []]
итак [x x] = [ [[], []] ]
Третий запуск :
x x = [[[], []]] [[[], []]] = [[[[], []]], [[[], []]]]
итак [x x] = [ [[[[], []]], [[[], []]]] ]
Комментарии:
1. вы правы! Я переставлю его. Извините за это, это мой первый пост…
Ответ №2:
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. оооооо, хорошо, спасибо, не уверен, почему у меня возникли проблемы. хотя спасибо!
Ответ №3:
Давайте пройдемся по коду, не так ли?:
x = []
: Создайте пустой список с именемx
for i in range(3)
: повторите приведенный ниже код три раза:x = [x x]
переназначьте значениеx
на текущее значениеx
плюс текущее значениеx
и перенесите это в список.
По сути, на каждой итерации происходит то, что ваш список вложен на один уровень, и список внутри вашего списка в настоящее время становится вложенным списком этого вложенного списка.
С точки зрения непрофессионала, самым простым объяснением было бы — На каждой итерации цикла for значение переменной x переназначается на значение two nested, которое также может содержать два других вложенных списка внутри одного списка.
Вот иллюстрация, показывающая значение x на каждой итерации for
-цикла:
>>> # 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