我正在尝试对此进行调试,但我看不出如何使其正常工作。
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
答案 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]