python - 我正在制作一个函数和一个循环并获取列表索引超出范围错误
问题描述
我正在尝试创建一个函数来删除与其旁边的项目相同的任何项目。我有下面的代码,我得到一个列表索引超出范围错误。如果您能提供帮助,那就太棒了,谢谢。
def unique_in_order(iterable):
chars = list(iterable)
for i in range(len(chars)):
if i > 0:
if chars[i] == chars[i-1]:
chars.remove(chars[i])
return chars
解决方案
如果您颠倒for
循环的顺序,从倒数第二个项目开始,当您从正在处理的列表中删除项目时,您不会弄乱循环的范围。
因此,在您的情况下,从开始len(chars)-2
并转到-1
(包括 0)并-1
像这样进行步骤:并在需要时for i in range(len(chars)-2,-1,-1)
删除该项目。i+1
此外,该[remove(x)][1]
方法将从列表中删除其值等于 的第一项x
,因此在这种情况下pop([i])
应使用以确保删除目标重复项。
def unique_in_order(iterable):
chars = list(iterable)
for i in range(len(chars)-2,-1,-1):
if chars[i] == chars[i+1]:
#print('removing ' + chars[i+1])
chars.pop(i+1)
print(chars)
return chars
out = unique_in_order('AAAABBBCCDAABBBX')
print(out)
返回:
['A', 'B', 'C', 'D', 'A', 'B', 'X']
推荐阅读
- python - 在 dockerized 环境中无法从 Flask 连接到 Kafka
- javascript - Javascript - 很多独立功能不好???(node.js)
- javascript - 徽标和文字未正确浮动
- mysql - liquibase : 修改 csv 文件并插入新记录
- amazon-web-services - 如何在 Dynamodb 中定义属性类型?
- asp.net - IIS 上带有哈希密码问题的 ASP MVC 登录
- mysql - 如何在 MYSQL 5.7 中为不同的通道设置不同的 replication_do_db?
- tensorflow - 可以在tensorflow中使用Intel Xeon CPU训练深度学习模型,解决gpu内存不足的问题
- angular - 如何使用 HostBinding 定位自定义指令以传递成功或错误消息并显示它?
- javascript - 如何在不渲染的情况下将虚拟 DOM 转换为真实的 DOM 元素?