Я только что решил еще одну проблему на тростниках, и, как и в моем предыдущем посте, самое популярное решение, которое использовалось гораздо меньше линий, чем у меня.
Задача для этого Ката это взять строку и указать, является ли это изограммой. Изограмма – это слово без повторяющихся букв.
Вот популярное решение:
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”