运行下面的代码时,我不明白为什么它不能删除所有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]
答案 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]。