仅删除python列表中特定相邻副本的一半

仅删除python列表中特定相邻副本的一半,python,list,duplicates,Python,List,Duplicates,我有一个输出数据的工具。众所周知,每当数据中出现“10”时,都会添加额外的“10”,即新数据变为10', '10', . 有时连续序列中可能有4个“10”,这意味着实际上有2个“10” 在读取数据时,我试图删除重复的数据。到目前为止,我已经学会了如何删除重复,如果只有两个相邻的重复找到,但在同一时间,如果偶数重复找到,我想返回一半的重复 x = [ '10', '10', '00', 'DF', '20' ,'10' ,'10' ,'10' ,'10', ....] 预期产量 [ '10',

我有一个输出数据的工具。众所周知,每当数据中出现“10”时,都会添加额外的“10”,即新数据变为10', '10', . 有时连续序列中可能有4个“10”,这意味着实际上有2个“10”

在读取数据时,我试图删除重复的数据。到目前为止,我已经学会了如何删除重复,如果只有两个相邻的重复找到,但在同一时间,如果偶数重复找到,我想返回一半的重复

x = [ '10', '10', '00', 'DF', '20' ,'10' ,'10' ,'10' ,'10', ....]
预期产量

[ '10', '00' , 'DF', ' 20', ' 10', '10' ..]

您可以尝试使用
itertools
中的
groupby()

X= [ '10', '10', '00', 'DF', '20' ,'10' ,'10' ,'10' ,'10']

from itertools import groupby

result = []
for k, g in groupby(X) :
    group = list(g)
    if k == '10' :
        result.extend(group[:(len(group)+1)/2])
    else :
        result.extend(group)
print result
给出:

['10', '00', 'DF', '20', '10', '10']
纯python方法

ls = []
dupe = True
for item in x:
    if ls and ls[-1] == item and dupe:
        dupe = False
        continue
    dupe = True
    ls.append(item)

['10', '00', 'DF', '20', '10', '10']

到目前为止你写了什么代码?@Henry 28使用列表理解。如果(I==0)或(x[I-1]!=x[I])或(x[I]!='10')]@lenik,则y=[x[I]表示范围内的I(Len(x))@lenik我是该组的新成员。我会检查并返回。@Poka try
在groupby(X)中为k,g打印k,list(g)
——这将使您更好地理解此函数的功能。@lenik我还有一些其他连续数据,如“00”,“00”…以前的解决方案也在替换它们。但我只想减少“10”@Poka不是问题,请在15秒内查看更新的答案=)@Poka听到这个消息很高兴!如果你发现任何其他标准,只需在这里留下评论,我将修改该标准solution@RafelC我也会检查这个解决方案。