python – 查找string中的string – 我可以得到所有的索引?
我有一些简单的代码:
def find(str, ch): for ltr in str: if ltr == ch: return str.index(ltr) find("ooottat", "o")  该函数只返回第一个索引。 如果我改变返回打印,它会打印0 0 0.为什么这是有什么办法得到0 1 2 ? 
 这是因为str.index(ch)将返回第一次出现ch的索引。 尝试: 
 def find(s, ch): return [i for i, ltr in enumerate(s) if ltr == ch] 
这将返回你需要的所有索引列表。
  PS Hugh的答案显示了一个生成器函数(如果索引列表可能会变大,它会有所不同)。 此function也可以通过将[]更改为()进行调整。 
我会和Lev一起去,但是值得指出的是,如果最终得到更复杂的search,那么使用re.finditer可能是值得记住的(但是re经常会导致更多的麻烦而不是价值 – 但有时候也很方便知道)
 test = "ooottat" [ (i.start(), i.end()) for i in re.finditer('o', test)] # [(0, 1), (1, 2), (2, 3)] [ (i.start(), i.end()) for i in re.finditer('o+', test)] # [(0, 3)] 
 def find_offsets(haystack, needle): """ Find the start of all (possibly-overlapping) instances of needle in haystack """ offs = -1 while True: offs = haystack.find(needle, offs+1) if offs == -1: break else: yield offs for offs in find_offsets("ooottat", "o"): print offs 
结果是
 0 1 2 
列弗的答案是我会使用的,但是这是基于你的原始代码的东西:
 def find(str, ch): for i, ltr in enumerate(str): if ltr == ch: yield i >>> list(find("ooottat", "o")) [0, 1, 2] 
你可以试试这个
 def find(ch,string1): for i in range(len(string1)): if ch == string1[i]: pos.append(i) 
许多使用正则expression式的替代方法
导入重新
iter = re.finditer(r'o',searchString)
索引= [x.start()for x in iter]
索引是匹配的string索引列表