2017-02-07 2 views
0

У меня есть переменная с именем CurrentLineup, который содержит набор из 5 имен в качестве такогоСохранение всех значений меняющейся переменной в цикле

set(['Player 1', 'Player 2', 'Player 3', 'Player 4', 'Player 5']) 

У меня есть цикл всех событий во время игра, которая включает в себя замену других игроков в игре и из нее.

Что я хотел бы сделать, так это создать список из 5 наборов человек как Обновления CurrentLineup, поэтому я инициализировал следующее вне цикла ... возьмите этот код в качестве примера.

Lineup_List = [] 
Lineup_List.append(Current_Lineup) 

For i in game_events: 
    if "Enters Game" in i: 
     player = 'Player 6' 
     Current_Lineup.add(player) 
    if "Leaves Game" in i: 
     player2 = 'Player 4' 
     Current_Lineup.remove(player2) 
    if len(Current_Lineup) == 5: 
     Lineup_List.append(Current_Lineup) 

Моя проблема заключается в том, что когда я вернусь Lineup_List после цикла, то есть окончательный вариант Current_Lineup количество раз.

Если этот цикл побежал в два раза, я бы надеяться на Lineup_List иметь следующий результат:

[set(['Player 1', 'Player 2', 'Player 3', 'Player 4', 'Player 5']), 
set(['Player 1', 'Player 2', 'Player 3', 'Player 6', 'Player 5'])] 

Как сохранить различные значения, которые CurrentLineup принимает через петлю, в порядке их появления?

+0

В списке хранится ссылка на тот же набор, что и несколько раз. вы можете 'append (copy.deepcopy (myset))' хранить копию, а не оригинал – deeenes

+0

Возможно, не нужно (или даже желательно) выполнить глубокую копию. Должна быть мелкая копия. – trincot

ответ

2

Вам необходимо сделать (неглубокую) копию набора при его добавлении, иначе вы просто будете изменять один и тот же набор, также если они уже указаны в списке строк. Так измените последнюю строку следующим образом (добавить set()):

Lineup_List.append(set(Current_Lineup)) 

Это присоединяет копия вашей текущей строки до набора, так что вы смело можете изменить его в последующих итераций, не затрагивая уже добавлено множество (с).

+0

Спасибо за ваш ответ @trincot. Я получаю следующую ошибку с вашим предложением: TypeError: объект 'set' не имеет атрибута '__getitem__'. Мысли? – BSHuniversity

+0

Ах, я пропустил ту часть, где вы сказали, что это набор. Я понял, что это список. Я обновил свой ответ соответственно. – trincot

+0

Извините за прошлое и будущее ... но вот самая новая ошибка с вашим обновленным ответом. «NameError: глобальное имя« Current_Lineup »не определено» – BSHuniversity

Смежные вопросы