Список не обновляется в последовательных циклах - PullRequest
0 голосов
/ 21 января 2020

Прошу прощения, если это очень простой вопрос. Я все еще изучаю Python и не смог найти ответ на этот конкретный c вопрос.

Объяснение того, что я пытаюсь сделать. Я делаю совокупность случайно выбранных значений. «tour» содержит значения, которые случайным образом перемещаются для создания каждого члена населения. Каждый член - это просто случайный ассортимент этих же значений. По сути, это список списков.

Проблема, с которой я столкнулся, заключается в том, что список tmp не сбрасывается после первого l oop. Как только внешний для l oop заканчивает свой первый l oop, tmp остается пустым, несмотря на то, что в начале каждого l oop.

он равен "tour". Вот фрагмент из двух петли.

    population = []
for x in range(0, 100, 1):
    tmp = tour
    tmptour = []
    while len(tmp) >= 1:
        r = random.randint(0, len(tmp)-1)
        tmptour.append(tmp.pop(r))
    population.append(tmptour)  
return population

1 Ответ

1 голос
/ 21 января 2020

Когда вы делаете

tmp = tour

, вы не создаете копию tour, вы просто копируете ссылку. Поэтому позже, когда вы делаете

tmptour.append(tmp.pop(r))

, вы фактически удаляете вещи из tour, поэтому на второй итерации он пуст.

Исправить это легко. Вместо установки tmp в качестве ссылки на tour установите его как копию tour.

tmp = tour[:]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...