如何删除python中列表中的Like元素?

How to delete Like elements in Lists in python?

本问题已经有最佳答案,请猛点这里访问。
1
List=[1,1,1,1,2,2,2,2,3,3,3,3]

从上面的列表中,我想删除第一、第二、第三和第五、第六、第七等等,直到我得到一个列表[1、2、3]。如果列表不是停在3,而是继续,我应该如何删除所有其他元素?


要删除重复项并保留订单,可以使用itertools.groupby

1
2
3
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
[1, 2, 3]

但是,如果要查找删除所有重复项的方法,而不是相同值的长时间运行,请使用空集合和for循环:

1
2
3
4
new_l = {}
for i in l:
   if i not in new_l:
      new_l.add(i)


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

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

sorted(set(my_list))

如果订单无关紧要:

1
list(set(my_list))

感谢@roadrunner在评论中给予EDOCX1[1]到EDOCX1[2]的帮助。


您希望将列表转换为一个集合,这将为您删除重复项。将集合转换回列表可能会使您更容易操作。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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

打电话:

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