Как мне разрезать строку по символам в Python?

Есть строка с одним или несколькими символами. Я хочу нарезать список так, чтобы смежные одинаковые символы находились в одном и том же элементе. Например:

'a' -> ['a']
'abbbcc' -> ['a', 'bbb', 'cc']
'abcabc' -> ['a', 'b', 'c', 'a', 'b', 'c']

Как мне сделать это в Python?

Ответ 1

Используйте itertools.groupby:

from itertools import groupby

s = 'abccbba'

print([''.join(v) for _, v in groupby(s)])
# ['a', 'b', 'cc', 'bb', 'a']

Ответ 2

Может быть достигнуто с помощью re.finditer()

import re
s='aabccdd'
print([m.group(0) for m in re.finditer(r"(\w)\1*", s)])
#['aa', 'b', 'cc', 'dd']

Ответ 3

Без каких-либо модулей и использования цикла 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)

Ответ 4

Еще одно альтернативное решение. Вам не нужно импортировать его в 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, [])

Ответ 5

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)