Python在维护订单的同时从列表中删除一些重复项?

use*_*318 3 python list set duplicates

我想删除我的python列表中的某些重复项.我知道有一些方法可以删除所有重复项,但我想只删除连续的重复项,同时保持列表顺序.

例如,我有一个如下列表:

list1 = [a,a,b,b,c,c,f,f,d,d,e,e,f,f,g,g,c,c]
Run Code Online (Sandbox Code Playgroud)

但是,我想删除重复项,并保持顺序,但仍保留2 c和2 f,如下所示:

wantedList = [a,b,c,f,d,e,f,g,c]
Run Code Online (Sandbox Code Playgroud)

到目前为止,我有这个:

z = 0
j=0
list2=[]
for i in list1:
    if i == "c":
        z = z+1
        if (z==1):
            list2.append(i)
        if (z==2):
            list2.append(i)
        else:
            pass
    elif i == "f":
        j = j+1
        if (j==1):
            list2.append(i)
        if (j==2):
            list2.append(i)
        else:
            pass
    else:
        if i not in list2:
            list2.append(i)  
Run Code Online (Sandbox Code Playgroud)

但是,这种方法给了我类似的东西:

wantedList = [a,b,c,c,d,e,f,f,g]
Run Code Online (Sandbox Code Playgroud)

因此,不维持秩序.

任何想法,将不胜感激!谢谢!

Alo*_*hal 8

不能完全确定,如果cf是特殊情况,或者如果您只想压缩连续的重复.如果是后者,您可以使用itertools.groupby():

>>> import itertools
>>> list1
['a', 'a', 'b', 'b', 'c', 'c', 'f', 'f', 'd', 'd', 'e', 'e', 'f', 'f', 'g', 'g', 'c', 'c']
>>> [k for k, g in itertools.groupby(list1)]
['a', 'b', 'c', 'f', 'd', 'e', 'f', 'g', 'c']
Run Code Online (Sandbox Code Playgroud)