Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 26, 2010 15:37:14

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

Буквы и/или числа в строке

Ну если следовать строго вашему заданию и не применять никаких непонятных символов, тогда после небольшой корректировки вашего кода получится так:

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)

Офлайн

#2 Сен. 26, 2010 15:44:25

grok
От:
Зарегистрирован: 2010-09-09
Сообщения: 74
Репутация: +  0  -
Профиль   Отправить e-mail  

Буквы и/или числа в строке

Или так:

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



Офлайн

#3 Сен. 26, 2010 16:04:11

breidos
От:
Зарегистрирован: 2010-09-21
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Буквы и/или числа в строке

Наконец та желаемый результат:

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
>>>
Z5 x3 A2

Спасибо всем кто помагал, теперь мне нужно сделать строку вида - Z5 x3 A2 ->>>> ZZZZZxxxAA. Щас вот буду дальше думать :)



Отредактировано (Сен. 26, 2010 16:11:53)

Офлайн

#4 Сен. 26, 2010 16:08:24

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

Буквы и/или числа в строке

Не будем мешать :)



Офлайн

#5 Сен. 26, 2010 16:47:02

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Буквы и/или числа в строке

Может так пойдет?

inp = 'ZZZZZxxxAA'
for i in set(inp):
print "%s%d " % (i, inp.count(i)),



Отредактировано (Сен. 26, 2010 16:48:03)

Офлайн

#6 Сен. 26, 2010 17:07:00

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

Буквы и/или числа в строке

Хорошо бы еще все таки сохранить порядок символов, в котором они появляются в строке.



Офлайн

#7 Сен. 26, 2010 17:20:58

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Буквы и/или числа в строке

Isem
Хорошо бы еще все таки сохранить порядок символов, в котором они появляются в строке.
Любой каприз :)
inp = 'ZZZZZxxxAA'
processed = []
for i in inp:
if i not in processed:
print "%s%d " % (i, inp.count(i)),
processed.append(i)



Офлайн

#8 Сен. 26, 2010 17:41:15

breidos
От:
Зарегистрирован: 2010-09-21
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Буквы и/или числа в строке

Ребята, в посте #13 у меня ответ выходит такой: Z5 x3 A2 (с пробелами). Подскажите как убрать пробелы.
И еще один вопрос: вот есть такая штука как input() - вводить можно только числовые значения? Ато я ввожу текст и он ругается.



Офлайн

#9 Сен. 26, 2010 17:46:27

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

Буквы и/или числа в строке

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 ) ) )
Хотя, если ловить все группы идущих подряд одинаковых символов как независимые (XXXfffrXXXX), тогда вот так:

print( ''.join( ch+str(len(s)) for s, ch in re.findall(r'((.)\2*)', x ) ) )



Отредактировано (Сен. 26, 2010 19:39:26)

Офлайн

#10 Сен. 26, 2010 18:47:12

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Буквы и/или числа в строке

Для группировок есть groupby

from itertools import groupby
inp = 'ZZZZZxxxAA'
print ''.join( k+str(len(list(x))) for k,x in groupby(inp) )
>> Z5x3A2

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version