【问题标题】:Comparing a string with multiple substrings of another string将一个字符串与另一个字符串的多个子字符串进行比较
【发布时间】:2020-09-03 18:48:24
【问题描述】:

还有另一种更简单的方法来编写代码,基本上检查字符串'abcde'的每个字符

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

【问题讨论】:

标签: python string string-comparison


【解决方案1】:

这应该和你放的一样。

return 'abcde'.startswith(input)

【讨论】:

  • 从描述看,空字符串的结果应该是什么,"abcde".startswith("") == True,和示例代码不太匹配
  • 是的,如果你不想包含空字符串,我认为最好的办法是添加一个and input
【解决方案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) 查找。

【讨论】:

    【解决方案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
    

    【讨论】:

    • 什么是not not pattern.match(...)?如果您只是为了将匹配转换为布尔值,您可以直接使用boolbool(pattern.match(...))
    【解决方案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
    

    如果这有帮助,请告诉我!

    【讨论】:

      【解决方案5】:

      你可以试试这个:

      If input in ['a', 'ab', 'abc', 'abcd', 'abcde']:
          return True
      else:
         return False
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多