确定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
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')