Хобрук: Ваш путь к мастерству в программировании

Сравнение строки с несколькими подстроками другой строки

Есть ли другой более простой способ написать код, который в основном проверяет каждый символ строки 'abcde'

if input == 'a' or input == 'ab' or input == 'abc' or input == 'abcd' or input == 'abcde':
    return True


Ответы:


1

Это должно делать то же самое, что и вы.

return 'abcde'.startswith(input)
18.05.2020
  • Из описания неясно, каким должен быть результат для пустой строки, "abcde".startswith("") == True, что не совсем соответствует коду примера. 19.05.2020
  • Да, если вы не хотите включать пустые строки, я думаю, лучше всего будет добавить and input. 19.05.2020

  • 2

    Не называйте переменные input, так как это затенит встроенную функцию input(). . Это считается плохой практикой, и достаточно просто выбрать другое имя переменной.

    Вы можете использовать набор, чтобы проверить, соответствует ли ввод какой-либо из подстрок:

    lookups = {'a', 'ab', 'abc', 'abcd', 'abcde'}
    
    my_input = input()
    
    if my_input in lookups:
        return True
    

    Мы также могли бы сгенерировать этот набор, используя понимание набора:

    characters = 'abcde'
    
    lookups = {characters[:i] for i in range(1, len(characters) + 1)}
    
    my_input = input()
    
    if my_input in lookups:
        return True
    

    Для больших наборов комбинаций преимущество использования набора вместо списка заключается в том, что вы получаете постоянное время поиска O(1) для поиска. Это намного лучше, чем использование списка, который обеспечивает линейный поиск O(N).

    18.05.2020

    3

    Есть несколько симпатичных способов сделать это. startwith, вероятно, самый эффективный, но они тоже должны работать:

    используя lstrip:

    return 'abcde'.lstrip(input)!='abcde'
    

    используя list comprehension:

    return any(['abcde'[:i+1] == input for i in range(len('abcde'))])
    

    используя regex:

       pattern = re.compile('^'+input)
       return bool(pattern.match('abcde'))
    

    или просто:

      return 'abcde'[:len(input)]==input
    
    20.05.2020
  • Что такое not not pattern.match(...)? Если бы вы сделали это только для преобразования match в логическое значение, вы могли бы использовать bool напрямую: bool(pattern.match(...)) 14.06.2020

  • 4

    Вероятно, вы могли бы попробовать что-то вроде этого:

    def your_function():
        # Add as much chars that you want here
        chars = "abcde"
    
        # Assuming you are taking the user input from terminal
        user_input = input()
    
        # Loop over every substring from chars
        for i in range(len(chars) + 1):
            if chars[:i] == user_input:
                return True
    
        return False
    

    Позвольте мне знать, если это помогает!

    18.05.2020

    5

    Вы можете попробовать это:

    If input in ['a', 'ab', 'abc', 'abcd', 'abcde']:
        return True
    else:
       return False
    
    10.06.2020
    Новые материалы

    ВЫ РЕГРЕСС ЭТО?
    Чтобы понять, когда использовать регрессионный анализ, мы должны сначала понять, что именно он делает. Вот простой ответ, который появляется, когда вы используете Google: Регрессионный..

    Не зря же это называют интеллектом
    Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..

    LeetCode Проблема 41. Первый пропущенный положительный результат
    LeetCode Проблема 41. Первый пропущенный положительный результат Учитывая несортированный массив целых чисел, найдите наименьшее пропущенное положительное целое число. Пример 1: Input:..

    Расистский и сексистский робот, обученный в Интернете
    Его ИИ основан на предвзятых данных, которые создают предрассудки. Он словно переходит из одного эпизода в другой из серии Черное зеркало , а вместо этого представляет собой хронику..

    Управление состоянием в микрофронтендах
    Стратегии бесперебойного сотрудничества Микро-фронтенды — это быстро растущая тенденция в сфере фронтенда, гарантирующая, что удовольствие не ограничивается исключительно бэкэнд-системами..

    Декларативное и функциональное программирование в стиле LINQ с использованием JavaScript с использованием каррирования и генератора ...
    LINQ - одна из лучших функций C #, которая обеспечивает элегантный способ написания кода декларативного и функционального стиля, который легко читать и понимать. Благодаря таким функциям ES6,..

    Структуры данных в C ++ - Часть 1
    Реализация общих структур данных в C ++ C ++ - это расширение языка программирования C, которое поддерживает создание классов, поэтому оно известно как C с классами . Он используется для..