Python の変数ループに関するいくつかの落とし穴

次の 2 つのループに注目してください。出力は同じですか?

print("#### for 循环 ####")
a = [0] * 6
for i in range(len(a)):
    print(i)
    a.pop()

print("#### while 循环 ####")
a = [0] * 6
i = 0
while i < len(a):
    print(i)
    a.pop()
    i += 1

出力は次のようになると思われる場合:

#### for 循环 ####
0
1
2
#### while 循环 ####
0
1
2

それは間違っている!実際の出力は次のとおりです。

#### for 循环 ####
0
1
2
3
4
5
#### while 循环 ####
0
1
2

それの訳は:

  • forループのスコープはループの開始前に決定され、ループ本体内の操作の影響を受けませんこれは、リストの長さがループ本体内で変更されるかどうかに関係なく、forループのスコープは同じままであることを意味します。
  • whileループのテスト条件は、各ループ反復の開始時に再計算されますwhileしたがって、ループを使用して変化するリストを反復処理すると、ループの条件が反復ごとに再チェックされ、条件が満たされなくなったときにループが終了します。

このことから、長さが動的に削減される配列を走査するときに、ループ本体にインデックス操作が含まれている場合、forそのループを使用すると、 IndexError: list index out of range!

要約すると、ループを変更可能にしたい場合は、whileループを使用してください。

おすすめ

転載: blog.csdn.net/raelum/article/details/132265007