在不使用(内置函数、临时、新列表、枚举)的情况下,使用2 for循环从列表中删除重复项


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)

如果内置的rangelen激怒了你,你也可以删除它们

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)            

最新更新