Ответ 1
Используйте itertools.groupby
:
from itertools import groupby
s = 'abccbba'
print([''.join(v) for _, v in groupby(s)])
# ['a', 'b', 'cc', 'bb', 'a']
Есть строка с одним или несколькими символами. Я хочу нарезать список так, чтобы смежные одинаковые символы находились в одном и том же элементе. Например:
'a' -> ['a']
'abbbcc' -> ['a', 'bbb', 'cc']
'abcabc' -> ['a', 'b', 'c', 'a', 'b', 'c']
Как мне сделать это в Python?
Используйте itertools.groupby
:
from itertools import groupby
s = 'abccbba'
print([''.join(v) for _, v in groupby(s)])
# ['a', 'b', 'cc', 'bb', 'a']
Может быть достигнуто с помощью re.finditer()
import re
s='aabccdd'
print([m.group(0) for m in re.finditer(r"(\w)\1*", s)])
#['aa', 'b', 'cc', 'dd']
Без каких-либо модулей и использования цикла for это также можно сделать интересным способом:
l=[]
str="aabccc"
s=str[0]
for c in str[1:]:
if(c!=s[-1]):
l.append(s)
s=c
else:
s=s+c
l.append(s)
print(l)
Еще одно альтернативное решение. Вам не нужно импортировать его в python2. В python3 вам нужен импорт из functools.
from functools import reduce # in python3
s='aaabccdddddaa'
reduce(lambda x,y:x[:-1]+[x[-1]+y] if len(x)>0 and x[-1][-1]==y else x+[y], s, [])
t=input()
c=[t[0]]
for i in range(1,len(t)):
if t[i]==c[-1][0]:
c[-1]=c[-1]+t[i]
else:
c.append(t[i])
print(c)