Как найти слово, в котором число различных символов минимально? Если таких слов несколько, найти первое из них.
Как это можно сделать?
Как найти слово, в котором число различных символов минимально? Если таких слов несколько, найти первое из них.
Как это можно сделать?
Я так понял, что вам нужно в заданной строке найти слово, в котором число УНИКАЛЬНЫХ символов минимально (сколько раз они повторяются неважно)? Тогда что-то типа такого (если разделитель слов — пробелы):
def f(string):
for i in string.split(' '):
if (len(set(string)) > len(set(i))):
string = i
return string
UPD
Добавил вариант на случай ввода строки в форме NFD (спасибо @jfs):
import regex
def f1(string):
def uniq(s):
return regex.findall(r'\X', s, regex.U)
for i in string.split(' '):
if (len(uniq(string)) > len(uniq(i))):
string = i
return string
u'\u0435\u0308' в третьем питоне (мало того, что до 3.3 не поддерживалось, так еще и пример по вашей ссылке например не всегда получается воспроизвести (на Win7 Python 3.4.3 не работает, на той же версии питона в убунте работает)). PS а почему в ответе по ссылке не используете встроенный модуль re?
– Flowneee
Jan 09 '16 at 17:54
re не поддерживает \X, то хотя бы попробовали бы код прежде чем комментировать.
– jfs
Jan 09 '16 at 18:18
regex.findall() возвращает список, вы хотите len(set() вызвать дополнительно. Человеко-читаемые буквы могут состоять из нескольких Unicode codepoints и в NFC. Для ясности, я бы изолировал функцию, которая разбивает текст на слова, от функции, которая работает пытается минимум найти -- у вас неверная реализация.
– jfs
Jan 12 '16 at 08:34
Если символ это Unicode codepoint, то чтобы найти слово с минимальным кол-вом символов из списка words:
word = min(words, key=lambda w: len(set(w)))
Если символ это символ, видимый пользователю (grapheme cluster):
import regex as re # pip install regex
word = min(words, key=lambda w: len(set(re.findall(r'\X', w))))
Если слова в тексте разделены символами пробелов (включая новый строки и Юникодные символы), то words = text.split().