Bilbo
Удаляю элемент, но переменная, которая на него ссылалась не обнуляется.
А с чего она должна обнуляться?
вот у вас написано
if j in i:
win_row.remove(i)
допустим перрвое же сравнение выдаст True, вы радостно удаляете i, что оно будет дальше удалять? нужно превать цикл, после удаления…
Дальше удалили вы первый элемент списка,на его место станет следующий, индексы всех элемнтов сдвинулись, первый стал нулевым, второй первым и т.д. как вы думаете какой элемент for возьмет следующим? нулевой он взял, следовательно возьмет первый, но первый уже имеет индекс 0, тоесть по факту он возьмет второй элемент из “изначального” списка, а первый у вас вообще проигнориться…
Вобщемто py.user.next говорит правильно, нельзя менять список который перебираешь, но если очнь хочеться или нужно, лабораторная там или задание где нжно решить задачу именно таким путем, то for тут использовать нельзя, нужно использвать while
win_row = [(0,1,2),
(3,4,5),
(6,7,8),
(0,3,6),
(1,4,7),
(2,5,8),
(0,4,8),
(2,4,6),
]
MOVES = [4,0,2,7]
i=0 #начальный индекс
while i < len(win_row): # пока i менше длинны списка
for j in MOVES:
if j in win_row[i]: #если в элемнте списка есть число из MOVES
win_row.remove(win_row[i]) # удалить элемент
break # прервать цикл
else: # если цикл завершился без break
i+= 1 # увеличиваем индекс на 1
print(win_row)