【问题标题】:How to delete Like elements in Lists in python? [duplicate]如何在python中删除列表中的Like元素? [复制]
【发布时间】:2026-02-14 20:55:02
【问题描述】:
List=[1,1,1,1,2,2,2,2,3,3,3,3]

从上面的列表中,我想删除第 1、第 2、第 3 和第 5、第 6、第 7 等等,直到我得到一个列表 [1,2,3]。如果列表没有在 3 处停止而是继续,我应该如何删除所有其他元素?

【问题讨论】:

  • 是否需要保留列表?把它做成一个集合可以去掉所有的重复,即使作为一个集合,你也可以让它再次成为一个列表,
  • 你好 Davy M,如果我把它做成一个集合,它会去掉重复的元素吗?
  • list(set(List)) 将返回唯一列表

标签: python python-3.x python-2.7


【解决方案1】:

要删除重复并保留顺序,您可以使用itertools.groupby

import itertools
l =[1,1,1,1,2,2,2,2,3,3,3,3]
new_l = [a for a, _ in itertools.groupby(l)]

输出:

[1, 2, 3]

但是,如果您正在寻找一种方法来删除所有重复项,而不是长时间运行相同的值,请使用空集和 for 循环:

new_l = {}
for i in l:
   if i not in new_l:
      new_l.add(i)

【讨论】:

  • 您还可以使用集合来跟踪所看到的内容,因为集合查找是 O(1):seen = set() new_l = [] for i in l: if i not in seen: new_l.append(i) seen.add(i)
  • @RoadRunner 好主意,请参阅我最近的编辑。
【解决方案2】:

如果你的列表是有序的,你可以这样做:

my_list = [1,1,1,1,2,2,2,2,3,3,3,3]

sorted(set(my_list))

如果顺序无关紧要:

list(set(my_list))

感谢 cmets 中的 @RoadRunner 从 sorted(list(set(my_list)))sorted(set(my_list)) 的协助

【讨论】:

  • 你也可以在这里做sorted(set(my_list))。如果您将sorted() 应用于集合,则无需包装list()
【解决方案3】:
def removeDuplicates(arr, n):
    if n == 0 or n == 1:
        return n

    temp = list(range(n))

    j = 0;
    for i in range(0, n-1): 
        if arr[i] != arr[i+1]:
            temp[j] = arr[i]
            j += 1

    temp[j] = arr[n-1]
    j += 1

    for i in range(0, j):
        arr[i] = temp[i]

    return j

打电话:

lst = [1,1,2]
removeDuplicates(lst, len(lst))

【讨论】:

    【解决方案4】:

    您想将列表转换为集合,这将为您删除重复项。将集合转换回列表可能会让您更容易操作。

    List = [1,1,1,1,2,2,2,2,3,3,3,3]
    List = list(set(List))
    

    【讨论】:

      最近更新 更多