вернуть удаленные элементы из списка?

у меня есть этот код (часть игры, которую я пытаюсь сделать), который проверяет элементы списка с элементами другого списка... в основном, он сравнивает каждый индекс каждого элемента, если 2 индекса равно удаляет его из списка

вот этот код:

checkctr = 0
x = 0
while checkctr < 4:
    if p1guesslist[x] == hidden[x]: 
        black += 1
        p1nonhidden.remove(hidden[x]) #p1nonhidden is a copy of hidden
        p1nonmatch.remove(hidden[x]) #p1nonmatch is a copy of p1guesslist
    x += 1
    checkctr += 1
for p1guess in p1nonmatch: #p1guess is a 4 digit user input
    if p1guess in p1nonhidden:
        white += 1

пример того, как код работает на выходе:

hidden = [1, 1, 2, 3] #elements of this is randomly generated
p1guesslist = [1, 3, 2, 4] #elements of this list is from p1guess
black = 2 #initial value is 0
white = 1 #initial value is 0

если индекс обоих списков равен, черный получает +1 и удаляется из списка. затем проверяются остальные элементы, если они есть в списке скрытых, если они -белые получают +1

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

hidden = [1, 1, 2, 3]
p1guesslist = [1, 3, 2, 4] #first input
black = 2
white = 1

p1guesslist = [1, 1, 2, 3] #second input
ValueError: list.remove(x): x not in list

я знаю, что из-за list.remove() возникает ValueError...

поэтому я подумал, есть ли способ вернуть элементы, которые были удалены из скрытых, после проверки, чтобы избежать ошибки

*я поместил мини-версию игры в этот онлайн-блокнот на тот случай, если вы захотите ее увидеть http://shrib.com/UMYKxGiY я использовал Python 3.4.1, чтобы сделать это


person user3921890    schedule 10.08.2014    source источник
comment
сделать копию списка   -  person Padraic Cunningham    schedule 10.08.2014
comment
разве это не означало бы, что будет тонна списка? и как заменить список? (извините, я новичок в программировании, честно говоря, это мой первый Python)   -  person user3921890    schedule 10.08.2014
comment
зачем вы их удаляете, если хотите оставить?   -  person Padraic Cunningham    schedule 10.08.2014
comment
я не хочу их оставлять, я хочу их вернуть... если я их не удалю, а индекс первого списка равен второму списку, это добавит +1 к черному и +1 к белый (чего не должно быть, либо +1 черный, либо +1 белый, либо вообще ничего)   -  person user3921890    schedule 10.08.2014


Ответы (1)


Обработать исключение:

try:
    list.remove(x)
except ValueError:
    pass

. Больше никаких "х нет в списке".

person verve    schedule 10.08.2014
comment
круто, это только уменьшило проблему (я думаю). к сожалению, если элемент удален, если я попытаюсь ввести число, равное элементу, +1 на белом не будет.. например, hidden = [1,2,3,4] first input = [1,5,5 ,5] оценка = [1, 0]; второй ввод = [5,5,5,1] оценка = [0,0] (вторая оценка должна быть [0, 1]) - person user3921890; 10.08.2014
comment
Я категорически не согласен. Эмпирические правила созданы для исключений (ха), и это именно одно из них. Я интерпретировал вопрос OP как означающий, что я ищу способ удалить первый экземпляр элемента в списке, если он присутствует. ValueError возникает тогда и только тогда, когда элемент отсутствует в списке. В вопросе ОП явно было нечто большее, и я не думал, что смогу адекватно ответить. Теперь заберите свой отрицательный голос! - person verve; 03.07.2015