确定python中的字符串是否包含在另一个字符串中

确定python中的字符串是否包含在另一个字符串中,python,python-2.7,Python,Python 2.7,我希望确定一个字符串是否完全包含在其他字符串列表的开头。例如,如果我有字符串cde,以及字符串列表: ['ab', 'bce', 'cdef'] 然后将确定cde包含在cdef 我也在寻找另一种方法——也就是说,如果我有术语abc来识别上面列表中的ab包含在其中 显然,这对于使用for循环设置来说很简单,即使用函数startswith检查每个实例,但是,如果要检查大量的可能性,这是不可伸缩的 虽然检查每个实例都是O(n)[因此如果有100000个可能性,那么速度会非常慢],但我正在寻找一种

我希望确定一个字符串是否完全包含在其他字符串列表的开头。例如,如果我有字符串
cde
,以及字符串列表:

  ['ab', 'bce', 'cdef']
然后将确定
cde
包含在
cdef

我也在寻找另一种方法——也就是说,如果我有术语
abc
来识别上面列表中的
ab
包含在其中

显然,这对于使用for循环设置来说很简单,即使用函数
startswith
检查每个实例,但是,如果要检查大量的可能性,这是不可伸缩的

虽然检查每个实例都是O(n)[因此如果有100000个可能性,那么速度会非常慢],但我正在寻找一种检查O(1)的方法。。。感觉上,如果“列表”是预先排序的,那么可以简单地提取最近的匹配项,但不确定如何提取

澄清:

  • 我只在字符串开头寻找完美匹配的地方(即包括整个搜索词)
  • 我将查找多个搜索词(因此,虽然最初对数据进行排序可能不快,但沉没成本将节省后续查找的费用)
  • 理想情况下,将返回所有可能的匹配项(即,如果
    cdef
    cdefg
    在列表中的何处,并查找
    cde
    ,则两者都将返回)
  • 我松散地使用术语“列表”,如在术语集合中
    • 在O(1)中不可能,因为根据定义,您必须遍历整个阵列。如果数组已排序,则可以对字符串进行二进制搜索,然后检查该位置的元素是否以字符串开头。该操作是O(日志n)

      导入对分 #返回以前缀开头的字符串的索引 #或者,如果列表中没有此类字符串,则为“无” def搜索(a,前缀): i=对分。左对分(a,前缀) isAtStart=(i请澄清问题。列表中是否包含所有需要的字符串?你只需要一根火柴,还是所有的火柴?匹配是否仅在字符串的开头?请注意,对列表进行排序并不比O(n log n)好,因此您的O(n)想法不会发生。另外,请注意,对于较短字符串的长度,字符串检查至少为O(m)。当你谈论复杂度时,请确保你是清楚的:无论是一个步骤还是整个过程。你可以通过多次字符串检查得到O(n)。我在做点什么
      import bisect
      
      # return the index of the string starting with the prefix
      # or None if no such string is in the list
      def search(a, prefix):
          i = bisect.bisect_left(a, prefix)
          isAtStart = (i < len(a) and a[i].startswith(prefix))
          return i if isAtStart else None
      
      search(['ab', 'bce', 'cdef'], 'bc')