我有以下代码:
oldlist = [42, 72, 32, 4, 94, 82, 67, 67, 89, 89, 89, 89, 5, 90, 5, 5]
def removeodds(thing):
for i in reversed(thing):
icount = thing.count(i)
if icount % 2 > 0:
while i in thing:
thing.remove(i)
return thing
newlist = removeodds(oldlist)
print(newlist)
这就是整个节目。
该函数应该遍历列表并查找列表中重复奇数次的任何数字。然后在 while 循环中删除它们。
它通过使用 i 启动 for 循环来实现这一点。
然后使用 count() 函数查看元素 i 在列表中出现的次数 (icount)。 如果 icount 除以二有余数,则它是奇数。然后 while 循环遍历列表,直到 i 被删除。
我有反向迭代列表,因为如果它以相反的方式迭代,元素在被删除时会在列表中移动,并且 for 循环最终会跳过索引。
但是,在上面的程序中,当你运行它时,for循环在90处停止,然后将列表发送回来,显示以下结果:
[42, 72, 32, 4, 94, 82, 67, 67, 89, 89, 89, 89, 90]
我不明白它为什么这样做。它应该显示以下内容:
[67, 67, 89, 89, 89, 89]
我尝试将数字添加到列表中并更改周围的内容。 如果在 5 到 90 之间再添加 5 个,该程序就可以运行。 然而,当前列表总是在 90 处停止 for 循环。 一旦运行,该函数应该返回一个列表,其中仅包含在列表中出现偶数次的数字。
枚举列表时不要修改列表。
您可以像这样更简单地实现您的目标:
from collections import Counter
oldlist = [42, 72, 32, 4, 94, 82, 67, 67, 89, 89, 89, 89, 5, 90, 5, 5]
c = Counter(oldlist)
newlist = [n for n in set(oldlist) if c[n] % 2 == 0]
输出:
[67, 89]
print(newlist)