For循环迭代似乎跳过了列表中的两个数字

时间:2019-06-24 20:49:52

标签: python python-3.x

运行下面的代码时,我不明白为什么它不能删除所有1?它保留了其中两个,并且在if语句之前添加了我的两个print语句,它显示程序似乎跳过了4个1的最后2个。我知道一种更简单的方法,我只是想了解为什么此方法不起作用的逻辑。

numbers3 = [1, 1, 1, 1, 4, 5, 7, 7, 9]
print(numbers3.count(1))

for number in numbers3:
    print(numbers3.count(number))
    print(number)
    if numbers3.count(number) > 1:
        numbers3.remove(number)
print(numbers3)

我希望结果是[1、4、5、7、9] 但是我却得到了[1,1,4,5,7,9]

enter image description here

2 个答案:

答案 0 :(得分:4)

欢迎使用Stackoverflow。

问题在于,您正在修改要遍历的列表,这很少能使Python(或大多数其他语言)获得令人满意的结果。

看到初学者的问题可以很有效地告诉我们预期的结果是什么,而不是原因,这是很常见的。阅读您的代码后,我推断(或更确切地说是猜测)您想要一个包含每个唯一编号的单个副本的列表。

达到目标的一种方法是建立所需数字的单独列表。因此(未测试)应该可以正常工作:

result = []
for number in numbers3:
    if number not in result:
        result.append(number)

从Python 3.6开始应保留顺序的更简单的方法是

result = list(set(numbers3))

答案 1 :(得分:1)

那是因为您要同时从列表中删除列表。删除[1,1],然后4成为第二个索引,它跳过另一个[1,1]。