python list遍歴削除の正しい方法
リストを巡るときは、条件に合ったデータを削除しますが、常に異常を報告します.コードは以下の通りです.
なぜならlistの要素を削除するとlistの実際の長さは小さくなりますが、ループ回数は減少せず、元の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)