Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 26, 2010 10:37:59

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

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

Есть строка вида:

ZZZZZxxxAA
Подскажите, как можно определить какие буквы и/или числа встречаются в этой строке, и их количество?

Вот я кое-что надумал:
x='ZZZZZxxxAA'
i=0
stroka=[]
for j in x:
if x[i]==x[i+1]:
stroka=x[i]+str(x.count(x[i]))
i=i+1
print stroka,
Но тут выводит только:
>>> 
Z5
А хотелось бы увидеть такое:
Z5 x3 A2



Отредактировано (Сен. 26, 2010 10:57:29)

Офлайн

#2 Сен. 26, 2010 11:14:04

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

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

x='ZZZZZxxxAA'
key=1
dic={}
i=0
while i < len(x)-1:
if x[i]==x[i+1]:
key+=1
dic[x[i]]=key
else:
key=1
i+=1
print dic.items()



Офлайн

#3 Сен. 26, 2010 13:05:58

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

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

x='ZZZZZxxxAA'
dic={}
for ch in x:
dic[ch] = dic.get(ch,0)+1
print( dic )
Или еще короче, но медленнее:
x='ZZZZZxxxAA'
print( { ch:x.count(ch) for ch in set(x) } )



Отредактировано (Сен. 26, 2010 13:12:55)

Офлайн

#4 Сен. 26, 2010 13:18:25

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

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

Isem
x='ZZZZZxxxAA'
dic={}
for ch in x:
dic[ch] = dic.get(ch,0)+1
print( dic )
Или еще короче, но медленнее:
x='ZZZZZxxxAA'
print( { ch:x.count(ch) for ch in set(x) } )
Первая конструкция мне очень понравилась (плохо я про словари почитал), а вот вторая, не знаю.. не нравятся мне длинные строки, но кому как удобно =)



Офлайн

#5 Сен. 26, 2010 14:26:32

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

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

Целый день пытаюсь доделать код в посте #1, но все безуспешно. Не могли бы помочь мне изменить именно #1 пост, потому что мне нужно чтобы результат был похож на - Z5 x3 A2. А в последующих постах он -{'A': 2, ‘x’: 3, ‘Z’: 5}



Офлайн

#6 Сен. 26, 2010 14:32:58

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

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

Выводить словарь можешь вот так:

x='ZZZZZxxxAA'
dic={}
for ch in x:
dic[ch] = dic.get(ch,0)+1
for key, value in dic.items():
print key, value
Результат будет:
A 2
x 3
Z 5



Офлайн

#7 Сен. 26, 2010 14:41:42

apologize828
От:
Зарегистрирован: 2010-02-13
Сообщения: 223
Репутация: +  1  -
Профиль   Отправить e-mail  

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

Словарь это неупорядоченная последовательность пар ключ-значение.
Если хотите чтобы все выводилось также как записано в словаре,то вместо обычного словаря используй Ordered dict или как там его)



Офлайн

#8 Сен. 26, 2010 14:44:35

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

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

Или так:

x='ZZZZZxxxAA'
dic={ ch : x.count(ch) for ch in set(x) }
print( ' '.join( k+str(n) for k,n in dic.items() ) )
Результат: A2 x3 Z5
Правда, непонятно будет, если вместо букв будут цифры.
Можно их разделить двоеточием, тогда вместо k+str(n) надо написать k+':'+str(n)



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

Офлайн

#9 Сен. 26, 2010 14:53:18

apologize828
От:
Зарегистрирован: 2010-02-13
Сообщения: 223
Репутация: +  1  -
Профиль   Отправить e-mail  

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

Блин люди вас же просят

мне нужно чтобы результат был похож на - Z5 x3 A2. А в последующих постах он -{'A': 2, ‘x’: 3, ‘Z’: 5}
#python 3.1
from collections import OrderedDict
x='ZZZZZxxxAA'
dic=OrderedDict()
for ch in x:
dic[ch] = dic.get(ch,0)+1
for key, value in dic.items():
print (key, value)
>>>
Z 5
x 3
A 2
>>>



Отредактировано (Сен. 26, 2010 15:01:23)

Офлайн

#10 Сен. 26, 2010 15:20:32

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

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

http://zalil.ru/29729292 - вот сюда закинул блок схему. Гляньте, может я неправильно сделал ее? Если правильно, то может я в питоне неправильно написал?:

x='ZZZZZxxxAA'
i=0
j=0
stroka=[]
while j<len(x)-1:
if x[i]!=x[i+1]:
print x[i]
i=i+1
else:
i=i+1
j=j+1
Результат у меня выходит такой:
>>>
Z x

П.С. Спасибо всем за помощь, но вы написали вещи которые непонятны, или не совсем понятны. Мне ведь это все еще нужно будет объяснять че и как работает :)



Отредактировано (Сен. 26, 2010 15:30:00)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version