首页 > 解决方案 > 无法在 for 循环中重置计数器

问题描述

我正在尝试以每 2 个重复整数乘以 2 并替换重复项的方式修改整数列表。这是一个例子: a = [1, 1, 2, 3] = [2, 2 ,3] = [4 ,3]
还有:b = [2, 3, 3, 6 ,9] = [2 , 6 , 6, 9] = [2, 12 , 9]

我正在使用下面的代码来实现这一点。不幸的是,每次我找到匹配项时,我的索引都会跳过下一个匹配项。

user_input = [int(a) for a in input().split()]

for index, item in enumerate(user_input):
    while len(user_input)-2 >= index:
        if item == user_input[index + 1]:
            del user_input[index]
            del user_input[index]
            item += item
            user_input.insert(index,item)
        break

print(*user_input)

标签: pythonpython-3.xfor-loopiteration

解决方案


在 Python 中,您不应该在迭代容器对象时对其进行修改。如果您知道自己在做什么,则有一些例外,但您当然不应该更改容器对象的大小。这就是你想要做的,这就是它失败的原因。

相反,请使用不同的方法。遍历列表但构造一个新列表。根据需要修改该新列表。这是执行您想要的代码的代码。这将构建一个名为的新列表new_list,并更改该列表中的最后一项或附加一个新项目。原始列表永远不会改变。

user_input = [int(a) for a in input().split()]

new_list = []
for item in user_input:
    while new_list and (item == new_list[-1]):
        new_list.pop()
        item *= 2
    new_list.append(item)

print(*new_list)

此代码通过您提供的两个示例。它还通过了[8, 4, 2, 1, 1, 7]应该导致的示例[16, 7]。我以前的版本没有通过最后一次测试,但这个新版本通过了。


推荐阅读