python3:为什么列表遍历跳过了7

n = int(input())
num_list = [int(i) for i in input().split()]
print(num_list)
for i in num_list:
num = i
print(i)
while (num != 1):
print(num, end=' ')
if(num % 2 == 1):
num = (num * 3 + 1) // 2
else:
num = num // 2
if(num in num_list):
num_list.remove(num)
print()
new_list = sorted(num_list, reverse=True)
print(new_list)

图片说明

https://blog.csdn.net/weixin_39986952/article/details/81268469?utm_source=blogxgwz5

应该是因为正在遍历的列表中已遍历的元素被删掉了1个,python处理时就把指针向后移了一个位置。

一边遍历一边编辑列表,很容易出现并发访问异常的。
建议用两个遍历,第一遍遍历收集需要删除的记录的小标,第二个循环遍历下标,删除集合元素。