将一个字符串与另一个字符串的多个子字符串进行比较

vsc*_*vsc 30 python string string-comparison

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

if input == 'a' or input == 'ab' or input == 'abc' or input == 'abcd' or input == 'abcde':
    return True
Run Code Online (Sandbox Code Playgroud)

duc*_*ool 37

这应该与您放置的内容相同。

return 'abcde'.startswith(input)
Run Code Online (Sandbox Code Playgroud)

  • 是的,如果你不想包含空字符串,我认为最好的办法是添加一个“and input”。 (2认同)

Roa*_*ner 12

不要命名变量input,因为它会影响内置函数input()。这样做被认为是不好的做法,并且很容易选择另一个变量名称。

您可以使用集合来检查输入是否与任何子字符串匹配:

lookups = {'a', 'ab', 'abc', 'abcd', 'abcde'}

my_input = input()

if my_input in lookups:
    return True
Run Code Online (Sandbox Code Playgroud)

我们也可以使用集合推导来生成这个集合:

characters = 'abcde'

lookups = {characters[:i] for i in range(1, len(characters) + 1)}

my_input = input()

if my_input in lookups:
    return True
Run Code Online (Sandbox Code Playgroud)

对于大量组合,在列表上使用集合的好处是您可以获得恒定的时间O(1)查找进行搜索。这比使用列表要好得多,列表将为您提供线性O(N)查找。


Bin*_*ven 6

有多种可爱的方法可以做到。 startwith可能是最有效的,但这些也应该有效:

使用lstrip

return 'abcde'.lstrip(input)!='abcde'
Run Code Online (Sandbox Code Playgroud)

使用list comprehension

return any(['abcde'[:i+1] == input for i in range(len('abcde'))])
Run Code Online (Sandbox Code Playgroud)

使用regex

   pattern = re.compile('^'+input)
   return bool(pattern.match('abcde'))
Run Code Online (Sandbox Code Playgroud)

要不就:

  return 'abcde'[:len(input)]==input
Run Code Online (Sandbox Code Playgroud)


Enr*_*Bet 5

你可能会尝试这样的事情:

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
Run Code Online (Sandbox Code Playgroud)

让我知道这是否有帮助!