I have a string like Hiiiiiiiiiiii
which it may be contains a chain of a char in it, here i
which it is repeated more than one times.I want to replace this chain of i
s with one i
and get the Hi
as the output.and for another example with the given word eeeeeeemadeeefghddd
i want to get emadefghd
as the output.How can I do this in python?
Asked
Active
Viewed 489 times
-1
3 Answers
5
You can use itertools
here
>>> import itertools
>>> s = "Hiiiiiiiiiiii"
>>> ''.join(i for i, _ in itertools.groupby(s))
'Hi'
>>> s = 'eeeeeeemadeeefghddd'
>>> ''.join(i for i, _ in itertools.groupby(s))
'emadefghd'

akash karothiya
- 5,736
- 1
- 19
- 29
-
@TimPietzcker ah, right, this solution assumes that a sequence can appear no more than once for a given letter. – timgeb May 24 '17 at 11:27
-
@TimPietzcker thanks for pointing out, how about itertools :) – akash karothiya May 24 '17 at 11:48
-
Meh. It's not wrong, but it's not very elegant either. A regex is exactly the right tool for this job. – Tim Pietzcker May 24 '17 at 12:13
-
@timgeb updated my answer – akash karothiya May 24 '17 at 12:13
-
ok, @TimPietzcker i will try this with regex thanks again, i am still in learning phase so i definitely need this kind of inputs, thanks for sharing – akash karothiya May 24 '17 at 12:14
3
You can replace every repetition of a character with the character itself using a fairly simple regex.
>>> import re
>>> re.sub(r'(.)\1+', r'\1', 'Hiiiiiiiiiiii')
'Hi'
>>> re.sub(r'(.)\1+', r'\1', 'eeeeeeemadeeefghddd')
'emadefghd'

timgeb
- 76,762
- 20
- 123
- 145
2
You can loop through the string
using enumerate()
and check each character against the one before it, for example:
s = 'eeeeeeemadeeefghddd'
result = ''
for i, c in enumerate(s):
if i == 0:
result += c
else:
if c != s[i-1]:
result += c
print result
Output:
emadefghd

Mohd
- 5,523
- 7
- 19
- 30