我有一个输出一些数据的工具。众所周知,每当数据中包含“ 10”时,就会在数据中添加额外的“ 10”,即新数据变为...“ 10”,“ 10”,...。有时连续序列中可能有4个“ 10”,这意味着实际上有2个“ 10”。
在读取数据时,我试图删除重复项。到现在为止,我已经学习了如何仅找到两个相邻的重复项,但是却发现偶数个重复项的同时删除一半的重复项。
x = [ '10', '10', '00', 'DF', '20' ,'10' ,'10' ,'10' ,'10', ....]
预期输出
[ '10', '00' , 'DF', ' 20', ' 10', '10' ..]
答案 0 :(得分:1)
您可以尝试使用groupby()
中的itertools
:
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']
答案 1 :(得分:0)
纯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']
答案 2 :(得分:0)
应准确处理所有重复项的更新版本:
res = []
temp = []
for i in range(1, len(x)):
if x[i-1] == x[i]:
temp.append(x[i-1])
else:
res.extend(temp[:len(temp)//2])
temp = []
res.append(x[i-1])
res.extend(temp[:len(temp)//2])
if x:
res.append(x[-1])
print(res)
我的方法是检查每个元素,将其与前一个元素进行比较,然后将所有重复项放入缓冲区中。对于任何不相等的比较,请将缓冲区的一半转储到结果中,清除缓冲区并将最左边的元素放入结果数组中。
如有必要,将if x[i-1] == x[i]:
更改为if x[i-1] == x[i] and x[i] == '10':
会将重复项限制为"10"
。
在repl上玩它,让我知道是否找到我错过的任何边缘情况。