Python:遍历列表并删除重复项(不使用 Set())

新手上路,请多包涵

所以我有一个清单:

 s = ['cat','dog','cat','mouse','dog']

而且我希望能够遍历列表并删除重复项,而无需使用 set() 函数!因此,例如它应该删除“猫”和位置 s[2],但将“猫”保留在位置 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

我在这里做错了什么?

原文由 Liam G 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 800
2 个回答

问题在于“自动”for 循环 - 在修改要迭代的内容时必须小心使用它们。这是正确的解决方案:

 def remove_dup(a):
   i = 0
   while i < len(a):
      j = i + 1
      while j < len(a):
         if a[i] == a[j]:
            del a[j]
         else:
            j += 1
      i += 1

s = ['cat','dog','cat','mouse','dog']
remove_dup(s)
print(s)

Output: ['cat', 'dog', 'mouse']

这个解决方案是就地的,修改原始数组而不是创建一个新数组。它也不使用任何额外的数据结构。

原文由 Apollys supports Monica 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以遍历列表并检查是否已添加该动物。

 s = ['cat','dog','mouse','cat','horse','bird','dog','mouse']

sNew = []
for animal in s:
    if animal not in sNew:
        sNew.append(animal)

s = sNew

原文由 Robbie 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题