2016-11-09 154 views
-1
def finding_letters(s,l): 

    i = 0 
    while i < len(s): 
     l = ''.join(l[i]) 
     a = s.find(l[i]) 
     return a 
    i = i + 1 

调用查找字符串中的

finding_letters('abcde',['ab','cd','e']) 

在列表中的项目应该给我的0,2,4的输出,但我只得到0输出。

我能做些什么来解决这个问题?

+0

请请勿使用Facebook的标签,如果它不是关于Facebook的东西。标记编程语言,例如。 – luschn

+0

[在Python中查找多个字符串中出现的字符串]可能的重复(http://stackoverflow.com/questions/3873361/finding-multiple-occurrences-of-a-string-within-a-string-in- python) –

回答

0

我不是100%确定你正在尝试做什么,但是如果你试图找到一个l的元素开始的索引,这里有一种方法。

s = 'abcde' 
l = ['ab','cd','e'] 
l = [i[0] for i in l if i in s] #get the first letter of an element of l, but only if that element can be found in s 
output = [list(s).index(i) for i in l] #get the index of s where that element can be found 
print(output)       
[0, 2, 4] 
+1

虽然这段代码可能会回答这个问题,但提供关于为什么和/或代码如何回答这个问题的附加上下文会提高它的长期价值。 –

0

一个简单的发电机的方法可以用在这里:

>>> def find_letters(seq, l): 
     for el in l: 
      if not seq.find(el) == -1: 
       yield seq.find(el) 


>>> find_letters('abcde',['ab','cd','e']) 
<generator object find_letters at 0x04305510> 
>>> list(find_letters('abcde',['ab','cd','e'])) 
[0, 2, 4] 
>>> 

或者更好的是,一个简单的生成器表达式:

>>> list(('abcde'.find(el) for el in ['ab','cd','e'] if 'abcde'.find(el) != -1)) 
[0, 2, 4] 
>>>