【发布时间】:2017-04-26 01:02:08
【问题描述】:
所以我有一个清单:
s = ['cat','dog','cat','mouse','dog']
我希望能够遍历列表并删除重复项,而不使用 set() 函数!因此,例如,它应该删除 'cat' 和位置 s[2],但将 'cat' 保留在位置 s[0]。然后它需要为“狗”做同样的事情,即。将 'dog' 保留在位置 s[1] 但从位置 s[4] 移除 'dog'。
所以输出是:
s = ['cat','dog','mouse']
我尝试使用 i 和 j 作为列表中的索引位置,并检查位置 i 处的元素是否等于位置 j 处的元素。如果是,它将删除它并将 j 的值增加 1,如果不是,那么它将离开它并仅增加 j 的值。在整个列表被迭代之后,它将增加 i 的值,然后再次检查整个列表,寻找新元素。下面:
i = 0
j = 1
for a in range(len(s)):
for b in range(len(s)):
if s[i] == s[j]:
s.remove(s[j])
j = j + 1
else:
j = j + 1
i = i + 1
我在这里做错了什么?
【问题讨论】:
-
使用 in 代替 ==。如果该数组中不存在该值,则将它们存储在单独的数组中。
-
您是否有任何理由需要更新列表而不是创建新列表?
l = []; for e in s: if e not in l: l.append(e) -
另一个问题是您正在遍历所有索引直到列表末尾。如果确实有任何重复,那么当您到达那里时,列表会变短,并且您将收到 IndexError。
-
你为什么不用
set?