def remove_dup1(a):
for i in range(len(a)):
for j in range(1, len(a)):
if a[i] == a[j]:
del a[j]
print(a)
s1 = [1,2,2,2,2,3,3,4,5,5,5,8,7,8]
remove_dup1(s1)
print(s1)
来自上面的代码片段我得到了这个错误";IndexError:列表索引超出范围";
挑战在于删除一个值会将后面的值向左移动。这会混淆下一个索引值和列表的总长度。您的索引i
基于原始列表的位置和长度,但您正在分割基础列表。
假设你以相反的方式完成了这个过程。从末尾向前扫描,只删除超过将遍历的下一个索引值的值。这样,您就不会影响尚未处理的列表项。
def remove_dup1(a):
for i in range(len(a)-1, -1, -1):
for j in range(i-1, -1, -1):
if a[i] == a[j]:
del a[i]
break
s1 = [1,2,2,2,2,3,3,4,5,5,5,8,7,8]
remove_dup1(s1)
print(s1)
如果内置的range
和len
激怒了你,你也可以删除它们
def remove_dup2(a):
i = a.__len__() - 1
while i:
j = i - 1
while j:
if a[i] == a[j]:
del a[i]
break
j -= 1
i -= 1
s1 = [1,2,2,2,2,3,3,4,5,5,5,8,7,8]
remove_dup2(s1)
print(s1)