python list遍歴削除の正しい方法


リストを巡るときは、条件に合ったデータを削除しますが、常に異常を報告します.コードは以下の通りです.
 
num_list = [1, 2, 3, 4, 5]
print(num_list)

for i in range(len(num_list)):
    if num_list[i] == 2:
        num_list.pop(i)
    else:
        print(num_list[i])

print(num_list)

なぜならlistの要素を削除するとlistの実際の長さは小さくなりますが、ループ回数は減少せず、元のlistの長さに沿って遍歴するため、インデックスオーバーフローが発生します.
 
ソリューション:逆ループ削除
 
num_list = [1, 2, 3, 4, 5]
print(num_list)

for i in range(len(num_list)-1, -1, -1):   # for i in range(0, num_list.__len__())[::-1]
    if num_list[i] == 2:
        num_list.pop(i)
    else:
        print(num_list[i])

print(num_list)