Рубрики
Без рубрики

Как они сделали это в одной линии? Часть 2: Изограммы

Я только что решил еще одну проблему на тростниках, и, как и в моем предыдущем посте, самое популярное решение … Tagged с начинающими, Python.

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

Задача для этого Ката это взять строку и указать, является ли это изограммой. Изограмма – это слово без повторяющихся букв.

Вот популярное решение:

def is_isogram(string):
    return len(string) == len(set(string.lower()))

И вот мой

def is_isogram(string):
    result = False
    string = string.lower()
    my_list = []
    for character in string:
        if character in my_list:
            return False
        my_list.append(character)
    return True

Ух ты. Большая разница.

Давайте разберем это короткое решение.

def is_isogram(string):
    return len(string) == len(set(string.lower()))

Правая сторона теста на равенство достаточно проста. Это просто длина струны. Правая сторона немного более плотная, но на самом деле это не так уж плохо. Его функция состоит в том, чтобы вычислить длину набора уникальных элементов в нить . Посмотрим, как это делает это. Сначала String.Lower необходим, потому что могут быть экземпляры верхнего и нижнего чехла одной и той же буквы, и программа должна признать это как одно и то же письмо. Далее, set (string.lower ()) дает нам набор данных со всеми уникальными элементами в строке. То есть, если буква b происходит дважды в строке, это произойдет только один раз в наборе. Тогда len (set (string.lower ())) Вычисляет длину этого набора. Теперь мы готовы рассмотреть == сравнение. Если длина строки равна длине набора, функция вернет Верно , указывая, что нить это изограмма. С другой стороны, если длина набора отличается от длины строки, это означает, что, по крайней мере, одна буква, по крайней мере, дважды в строке. Затем функция вернется Ложный , потому что строка это не изограмма.

В качестве последнего примечания интересно рассмотреть случай, где строка пустая строка. В этом случае как длина набора, так и длина строки равны нулю, поэтому функция вернет true. К счастью, инструкции показывают, что мы должны предположить, что пустая строка – это изограмма. Это удобно. Это означает, что нам не нужен дополнительный код для обработки случая пустой строки. Функциональный корпус остается на содержательной одной линии.

Так что это. Задача, которую я решил с 8 линиями функционального тела, может быть выполнена только с 1.

Оригинал: “https://dev.to/ekand/how-did-they-do-that-in-one-line-part-2-isograms-52p6”