Pythonでループ内でリストを更新する際には注意が必要です。特に、上書き(=)と追加(extend)の違いは重要です。次の2つのコードスニペットを考えてみましょう。
1つ目のコードスニペット:
ex1.py
for i in range(5):
# iの2乗の値をリストに格納
squares = [i ** 2]
print(squares)
2つ目のコードスニペット:
ex2.py
squares = []
for i in range(5):
# iの2乗の値をリストに追加
squares.extend([i ** 2])
print(squares)
これらのコードは、ループの各ステップで数値の2乗を計算し、それをsquaresリストに格納しようとしています。しかし、これらの振る舞いは全く異なります。
1つ目のコードでは、ループの各ステップで新しい2乗の数値が計算され、それが新しいリストとしてsquaresに上書きされます。その結果、squaresにはループの各ステップで新しく生成されるリスト(つまり、1つの2乗の数値だけを持つ)が上書きされていきます。
一方、2つ目のコードでは、ループの各ステップで新しい2乗の数値が計算され、それがsquaresリストに追加されていきます。extendメソッドを用いているため、squaresにはループの各ステップで計算された2乗の数値がすべて格納され、リストが順次拡張されていきます。
これらの違いを理解することで、Pythonでリストを更新する際の予期しない挙動を防ぐことができます。