当运行下面的代码时,我不明白为什么它不删除所有的 1?它保留了其中两个,并且在 if 语句之前添加了我的两个打印语句,它显示程序似乎跳过了 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]
请您参考如下方法:
欢迎使用 Stackoverflow。
问题是您正在修改正在迭代的列表,这在 Python(或大多数其他语言)中很少能获得令人满意的结果。
初学者提出的问题很常见,这些问题有用地告诉我们预期的输出是什么,但没有告诉我们为什么。阅读您的代码,我推断(或者更确切地说是猜测)您想要一个包含每个唯一数字的单个副本的列表。
实现您的目标的一种方法是构建一个单独的列表,列出您想要的数字。所以这个(未经测试的)应该有效:
result = []
for number in numbers3:
if number not in result:
result.append(number)
一个更简单的方法,因为 Python 3.6 应该保留顺序,将是
result = list(set(numbers3))
