Python待办应用中print函数的列表索引错误问询
问题分析与解决
你的问题核心在于删除操作与索引访问的顺序逻辑错误:
当你先执行todos.remove(deleting_todo)后,列表todos的结构已经改变——目标元素被移除,后续元素会向前移位填补空缺。此时再用之前计算的todo_index - 1去访问列表,得到的是删除后该位置的新元素,而非你原本要删除的那个。
两种可行修复方案
方案1:先保存待删除元素,再执行删除
先通过索引获取并保存目标元素,删除后直接用保存的变量打印,彻底避开对变化后列表索引的依赖:
# 先获取并保存待删除元素 deleting_todo = todos[todo_index - 1] # 执行删除操作 todos.remove(deleting_todo) # 使用保存的元素打印结果 print(f"todo '{deleting_todo}' was deleted successfully")
方案2:使用pop()方法(更高效简洁)
pop()方法支持通过索引直接删除元素,同时返回被删除的元素,一步完成删除与获取操作,无需额外的查找步骤:
# 通过索引删除并获取被删除的元素 deleted_todo = todos.pop(todo_index - 1) # 直接打印返回的目标元素 print(f"todo '{deleted_todo}' was deleted successfully")
另外注意:原代码里的wad是拼写错误,建议修正为was。
内容的提问来源于stack exchange,提问作者user26745043
相关产品推荐
相关产品推荐

