【发布时间】:2020-10-13 06:04:07
【问题描述】:
我想从列表中删除重复项。我知道使用list(dict.fromkeys(my list)) 可以轻松完成,但我想通过遍历列表来完成。当我从列表中删除重复数字时,循环变量j 会在后续迭代中导致Index error : list index out of range,即使我正在更改范围输入。我想知道如何更改循环内的循环变量?
def rem_duplicate(seq):
for i in range(len(seq)):
num = seq[i]
count = 0
length = len(seq)
for j in range(length):
if seq[j] == num:
count += 1
if count > 1:
del seq[j]
length=length-1
return seq
my_list = [2, 3, 4, 5, 6, 7, 8, 3, 4, 1, 5, 2, 5, 7, 9]
print(rem_duplicate(my_list))
【问题讨论】:
-
尤其是这个答案:stackoverflow.com/a/42773232/895932 使用了一个 while 循环。
-
你可以直接使用 set(my_list) 或者迭代你可以使用 while 循环来代替
-
您在
for循环内更改length变量没有任何作用。循环已经用length的原始值初始化,不会更新。 -
在遍历它的同时改变这样的列表是一场噩梦,当你删除一个元素时你的循环计数器变得不正确,更好的方法是过滤掉你不想要的元素并使用上面链接的列表理解在另一个列表中累积。
-
列表推导不能用于删除重复项,因为它无法访问其他元素,因此我建议在该重复目标问题中使用 while 循环的答案,这适用于这种情况。