为什么我的unique-sort函数会引发IndexError?

时间:2017-03-18 05:06:16

标签: python python-3.x sorting unique indexoutofboundsexception

我正在尝试对此进行调试,但我看不出如何使其正常工作。

def makeUnique(numList):

    """Takes in a list of numbers, sorts them, and then removes duplicate numbers, modifying the input list."""

    numList.sort() # making sure that numList is taken as a list.
    i = 0
    while i < (len(numList)):
        if numList == numList[i+1]: #I'm sure this is where the problem is.
            del numList[i+1]
        else:
            i = i + 1

1 个答案:

答案 0 :(得分:0)

你实际上有两个问题,但你对第一个问题的答案是正确的。这一行:

        if numList == numList[i+1]:

...正在测试numList整个是否等于它的i+1元素,这显然是不正确的。它应该是这样的:

        if numList[i] == numList[i+1]:

...根据需要测试i元素是否等于i+1元素。

您的第二个问题是,最后一次绕过for循环,列表中有i+1个元素 - 但numList[i+1]语句中的if会尝试查找最后一个元素之后的元素(因为Python zero-based indexing) - 你得到一个错误:

IndexError: list index out of range

如果您更换该行:

    while i < (len(numList)):

    while i < (len(numList) - 1):

...你将循环一次,并避免从列表的末尾掉下来。

解决这两个问题,你最终得到了这个:

def makeUnique(numList):        
    numList.sort()
    i = 0
    while i < (len(numList) - 1):
        if numList[i] == numList[i+1]:
            del numList[i+1]
        else:
            i = i + 1

......按预期工作:

>>> s = [82, 101, 112, 101, 116, 105, 116, 105, 111, 117, 115]
>>> makeUnique(s)
>>> s
[82, 101, 105, 111, 112, 115, 116, 117]