想转行的菜鸟 2024-03-17 12:18 采纳率: 75%
浏览 8
已结题

Python运行时提示索引超出范围,研究了半天没想明白,请教


lst =["赵敏","张大刚","张小忌","武则天","赢政","马超"]
for i in range(len(lst)):
    print(i)
    print(len(lst))
    if lst[i].startswith("张"):
        print(lst[i])
        del lst[i]
        print(lst)
print(lst)

报错
Traceback (most recent call last):
  File "E:\python\test\test12.py", line 5, in <module>
    if lst[i].startswith("张"):
       ~~~^^^
IndexError: list index out of range

请问下,是哪里的问题呢?

  • 写回答

6条回答 默认 最新

  • 关注

    both_war 中午好🌞🌞🌞
    本答案参考ChatGPT-3.5

    这个问题发生在你在循环中删除列表元素的过程中。当你删除一个元素后,列表的长度会发生改变,但是循环的范围仍然是之前的长度,导致了索引超出范围的错误。

    解决方案:

    1. 一种解决方案是使用while循环而不是for循环,因为while循环可以动态地调整循环范围。你可以设置一个变量i来表示当前的索引,然后在删除元素后递增这个变量。
    lst = ["赵敏","张大刚","张小忌","武则天","赢政","马超"]
    i = 0
    while i < len(lst):
        if lst[i].startswith("张"):
            del lst[i]
        else:
            i += 1
    print(lst)
    
    1. 另一种解决方案是创建一个新的列表来存储满足条件的元素,而不是直接在原列表上进行修改。
    lst = ["赵敏","张大刚","张小忌","武则天","赢政","马超"]
    new_lst = []
    for item in lst:
        if not item.startswith("张"):
            new_lst.append(item)
    lst = new_lst
    print(lst)
    

    这些解决方案都避免了在循环中删除列表元素时导致的索引超出范围问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 3月26日
  • 已采纳回答 3月18日
  • 创建了问题 3月17日

悬赏问题

  • ¥66 换电脑后应用程序报错
  • ¥50 array数据同步问题
  • ¥15 pic16F877a单片机的外部触发中断程序仿真失效
  • ¥15 Matlab插值拟合差分微分规划图论
  • ¥15 keil5 target not created
  • ¥15 C/C++数据与算法请教
  • ¥15 怎么找志同道合的伙伴
  • ¥20 如何让程序ab.eXe自已删除干净硬盘里的本文件自己的ab.eXe文件
  • ¥50 爬虫预算充足,跪巨佬
  • ¥15 滑块验证码拖动问题悬赏