Python list.remove () пропускает следующий элемент в списке

Python, но не программирование, новичок здесь. Я'Я программирую со списками и столкнулся с интересной проблемой.

width = 2
height = 2

# Traverse the board
def traverse(x, y):
    # The four possible directions
    squares = [(x - 1, y), (x + 1, y), (x, y - 1), (x, y + 1)]
    print squares

    # Remove impossible squares
    for square in squares:
        print "now accessing", square
        if (square[0] < 1 or square[0] > width or 
            square[1] < 1 or square[1] > height or
            square == (1, height)):
            squares.remove(square)
            print "removed", square
    print(squares)

# Testing traverse
traverse(1,1)

Это приводит к следующему выводу:

[(0, 1), (2, 1), (1, 0), (1, 2)]
now accessing (0, 1)
removed (0, 1)
now accessing (1, 0)
removed (1, 0)
[(2, 1), (1, 2)]

Он полностью пропускает элементы (2,1) и (1,2) - даже не проверяя их! Я нашел ответы здесь, говоря, что я не долженне нужно изменять список при его обходе, и да, это определенно имеет смысл. Ошибка новичка. Но может кто-нибудь сказать мне, почему это не такт работаешь? Какие'за вуалью списков Python?

Ответы на вопрос(5)

Ваш ответ на вопрос