Найти - Пользователи
Полная версия: Оставить в строке только уникальные цифры или буквы.
Начало » Python для новичков » Оставить в строке только уникальные цифры или буквы.
1
Dobrodel
Друзья, здравствуйте
Подскажите пожалуйста как решить такую задачку:
Необходимо в строке оставить уникальные цифры или буквы, остальные удалить.
Я попробывал вот так:
str='ВРЕМЯ НЕ ЖДЁТ'
set( x for x in str if x.isalnum() )
возвращает пустое множество:
set([])

Как решить?
Dobrodel
Простите, нашел решение сам))

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'])
botinag
Dobrodel
set( x for x in str if x.isalnum() )
есть же генератор множеств. лучше его юзать
{ x for x in str if x.isalnum() }
и называть свою переменную именем стандартной функции str() не комильфо.
py.user.next
Вариант через filter.
>>> s = 'abcabc123123!@#$'
>>> g = filter(str.isalnum, set(s))
>>> set(g)
{'a', 'c', 'b', '1', '3', '2'}
>>>
Dobrodel
Друзья, благодарю Вас за ответы.
Но я так думаю, что Вы написали одно и тоже. Только тут проблема была именно в русских буквах.
Я протестировал - получил что re.sub работает не хуже, по времени обработки. Поэтому я использовал именно вариант с re.
name='ВРЕМЯ НЕ ЖДЁТ'
inword = '[\s,.:;"\'§±><)(*&^%$@!~`]'
set(re.sub( inword, '', name ))
py.user.next
Dobrodel
Я протестировал - получил что re.sub работает не хуже, по времени обработки.
Алгоритм-то другой получился.

name='ВРЕМЯ НЕ ЖДЁТ©'
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB