Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 11, 2015 07:53:40

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

Оставить в строке только уникальные цифры или буквы.

Друзья, здравствуйте
Подскажите пожалуйста как решить такую задачку:
Необходимо в строке оставить уникальные цифры или буквы, остальные удалить.
Я попробывал вот так:

str='ВРЕМЯ НЕ ЖДЁТ'
set( x for x in str if x.isalnum() )
возвращает пустое множество:
set([])

Как решить?

Офлайн

#2 Янв. 11, 2015 07:59:42

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

Оставить в строке только уникальные цифры или буквы.

Простите, нашел решение сам))

str='ВРЕМЯ НЕ ЖДЁТ'
str=unicode( str, 'UTF-8' )
# или  str=u'ВРЕМЯ НЕ ЖДЁТ'
set( x for x in str if x.isalnum() )

Результат

set([u'\u0401', u'\u0420', u'\u0423', u'\u0422', u'\u0427', u'\u042f', u'\u0410', u'\u0418', u'\u041d', u'\u041f'])

Офлайн

#3 Янв. 11, 2015 08:54:48

botinag
Зарегистрирован: 2014-02-20
Сообщения: 179
Репутация: +  35  -
Профиль   Отправить e-mail  

Оставить в строке только уникальные цифры или буквы.

Dobrodel
set( x for x in str if x.isalnum() )
есть же генератор множеств. лучше его юзать
{ x for x in str if x.isalnum() }
и называть свою переменную именем стандартной функции str() не комильфо.

Офлайн

#4 Янв. 11, 2015 11:09:32

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Оставить в строке только уникальные цифры или буквы.

Вариант через filter.

>>> s = 'abcabc123123!@#$'
>>> g = filter(str.isalnum, set(s))
>>> set(g)
{'a', 'c', 'b', '1', '3', '2'}
>>>



Офлайн

#5 Янв. 11, 2015 11:53:13

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

Оставить в строке только уникальные цифры или буквы.

Друзья, благодарю Вас за ответы.
Но я так думаю, что Вы написали одно и тоже. Только тут проблема была именно в русских буквах.
Я протестировал - получил что re.sub работает не хуже, по времени обработки. Поэтому я использовал именно вариант с re.

name='ВРЕМЯ НЕ ЖДЁТ'
inword = '[\s,.:;"\'§±><)(*&^%$@!~`]'
set(re.sub( inword, '', name ))

Отредактировано Dobrodel (Янв. 11, 2015 11:59:39)

Офлайн

#6 Янв. 12, 2015 01:53:38

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Оставить в строке только уникальные цифры или буквы.

Dobrodel
Я протестировал - получил что re.sub работает не хуже, по времени обработки.
Алгоритм-то другой получился.

name='ВРЕМЯ НЕ ЖДЁТ©'



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version