使用for循环,报错IndexError: list index out of range

新手上路,请多包涵

题目描述

从排序数组中删除重复项

题目来源及自己的思路

我用这个代码实现从排序数组中删除重复项,就是LeetCode上的算法题,我先用for循环写,感觉思路没问题,但一直报错IndexError: list index out of range,后来查了下答案,只是把for改成了while,然后就通过了检查。这个是不是因为for循环range()函数中只会在第一次调用时计算len(nums),之后range的值就不会改变了。

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)
这是for循环的:
1 nums = [1,1,1,2,3,1,1]
2 count = 0
3 if len(nums) == 1 or len(nums) == 0:
4 count = len(nums)
5 else:
6 for i in range(len(nums)-1):
7 print(len(nums))
8 if nums[i] == nums[i+1]:
9 del nums[i+1]
10 else:
11 count += 1
12
13 print(count)
error : IndexError: list index out of range
这是while正确的版本:
class Solution:

def removeDuplicates(self, nums):
    """
    :type nums: List[int]
    :rtype: int
    """
    i = 0
    if len(nums) == 1 or len(nums) == 0:
        return len(nums)
    else:
        while i < (len(nums)-1):  
            if nums[i] == nums[i+1]:
                del nums[i+1]
            else:
                i += 1     
        return 


你期待的结果是什么?实际看到的错误信息又是什么?

还有一个小问题,我的while的代码,最后只写了return也能返回正确的结果,这是什么原因?是不是因为LeetCode他帮我补上了?新手,只学了下基础语法,有些地方搞不清楚,多谢各位大佬了!

阅读 9.3k
1 个回答

你的第一个问题回答是 :是的, 他会先计算 range(len(nums)-1)的值, 接下来再进行循环, 而 while 每执行一次, 都会判断条件是否为True

第二个问题: 可能你没 C语言的基础吧, return 的出现, 有两个含义: (1).返回要返回的值, (2).代表函数运行结束, 而此问题无需返回值, 功能全在函数体执行完毕, So不加return也可以

第三个问题: 知道为啥这么长时间没人回答你吗? 你有部分代码没有Markdown语法, 看起来很乱, 程序员最烦这个, 其次, 文字表述太长了, 大家真的不想看。。。。。。行吧, 就帮你到这里了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题