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リストのベールの背後にあるものは何ですか?