删除重复但保留序列

时间:2015-08-22 21:33:46

标签: python

我试图减少带有重复项的字符串但是我不想创建一个集合。例如

mystring = 'TTTTTPPPTPTTTTPPPPPPPPP'

字母的顺序是' TPTPTP',所以我需要一个结果字符串

newstring = 'TPTPTP'

我确信有一个简单的单行,但它避开了我

3 个答案:

答案 0 :(得分:5)

您正在寻找itertools.groupby

>>> mystring = 'TTTTTPPPTPTTTTPPPPPPPPP'
>>> groups = [x for x, y in itertools.groupby(mystring)]
>>> groups
['T', 'P', 'T', 'P', 'T', 'P']
>>> ''.join(groups)
TPTPTP

Official documentation

答案 1 :(得分:1)

将每个角色拉上前一个角色,然后选择不同的角色:

>>> a
'TTTTTPPPTPTTTTPPPPPPPPP'
>>> ''.join(i for i, j in zip(a, '\0' + a) if i != j)
'TPTPTP'

答案 2 :(得分:1)

如果您愿意,也可以使用正则表达式。

>>> import re
>>> mystring = 'TTTTTPPPTPTTTTPPPPPPPPP'
>>> ''.join(re.findall(r'(.)\1*', mystring))
'TPTPTP'

查找任何字符,然后查找相同的字符零次或多次。