Форум сайта python.su
7
Ну если следовать строго вашему заданию и не применять никаких непонятных символов, тогда после небольшой корректировки вашего кода получится так:
x='ZZZZZxxxAA'
i=j=1
while j<=len(x):
if j<len(x) and x[j-1]==x[j]:
i+=1
else:
print( x[j-1], i )
i=1
j+=1
Отредактировано (Сен. 26, 2010 16:00:18)
Офлайн
0
Или так:
x='ZZZZZxxxAAk'
i=1
j=0
while j < len(x)-1:
if x[j]==x[j+1]:
i+=1
else:
print x[j], i
i=1
j+=1
print x[j], i
Офлайн
0
Наконец та желаемый результат:
x='ZZZZZxxxAA'
i=j=1
while j<=len(x):
if j<len(x) and x[j-1]==x[j]:
i+=1
else:
print x[j-1]+str(i),
i=1
j+=1
Отредактировано (Сен. 26, 2010 16:11:53)
Офлайн
7
Не будем мешать :)
Офлайн
13
Может так пойдет?
inp = 'ZZZZZxxxAA'
for i in set(inp):
print "%s%d " % (i, inp.count(i)),
Отредактировано (Сен. 26, 2010 16:48:03)
Офлайн
7
Хорошо бы еще все таки сохранить порядок символов, в котором они появляются в строке.
Офлайн
13
IsemЛюбой каприз :)
Хорошо бы еще все таки сохранить порядок символов, в котором они появляются в строке.
inp = 'ZZZZZxxxAA'
processed = []
for i in inp:
if i not in processed:
print "%s%d " % (i, inp.count(i)),
processed.append(i)
Офлайн
0
Ребята, в посте #13 у меня ответ выходит такой: Z5 x3 A2 (с пробелами). Подскажите как убрать пробелы.
И еще один вопрос: вот есть такая штука как input() - вводить можно только числовые значения? Ато я ввожу текст и он ругается.
Офлайн
7
EdИли что-то типа этого:
Любой каприз
Код:
inp = ‘ZZZZZxxxAA’
processed =
for i in inp:
if i not in processed:
print “%s%d ” % (i, inp.count(i)),
processed.append(i)
import re
x = 'ZZZZZxxxAA'
for ch in re.findall(r'(.)\1*', x ):
print( "{}{}".format( ch, x.count(ch)), end = '' )
print( ''.join( ch + str(x.count(ch)) for ch in re.findall(r'(.)\1*', x ) ) )
print( ''.join( ch+str(len(s)) for s, ch in re.findall(r'((.)\2*)', x ) ) )
Отредактировано (Сен. 26, 2010 19:39:26)
Офлайн
32
Для группировок есть groupby
from itertools import groupby
inp = 'ZZZZZxxxAA'
print ''.join( k+str(len(list(x))) for k,x in groupby(inp) )
Офлайн