python - 无法在 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)
解决方案
在 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]
。我以前的版本没有通过最后一次测试,但这个新版本通过了。
推荐阅读
- spring - 如何分离具有相同回报的瓷砖(是否有可能在tiles.xml中获得完整的请求)
- java - Json中多级数组的Jsonpath表达式
- google-apps-script - 当某个单元格的值发生变化时求和
- python - 有没有可以“在浏览器中”学习 Python 算法的网站
- asp.net - 使用提供的密码无法读取证书数据,在 Linux 上运行 ASP.NET Core Kestrel 时密码可能不正确
- r - 重复测试中的错误:组中相同的 p 值
- python - 添加包含字符串、整数和 0 混合的 2 个系列
- node.js - Node.js + SQL Server 错误:ConnectionError:连接丢失 - 读取 ECONNRESET
- ajax - 单击按钮后如何更新输出文本。在素面
- python - 我正在使用 Jaeger 跟踪 python 函数。我必须手动在每个函数中创建跨度吗?