我试图减少带有重复项的字符串但是我不想创建一个集合。例如
mystring = 'TTTTTPPPTPTTTTPPPPPPPPP'
字母的顺序是' TPTPTP',所以我需要一个结果字符串
newstring = 'TPTPTP'
我确信有一个简单的单行,但它避开了我
答案 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
答案 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'
查找任何字符,然后查找相同的字符零次或多次。