find()有多个子串 - Python

时间:2015-02-02 03:56:37

标签: python string python-2.7

我如何找到第一次出现的字符eo

我想做这样的事情:

my_string = "Hello World"
x = my_string.find('e' or 'o',my_string)
print x # 1

3 个答案:

答案 0 :(得分:1)

enumerate函数与生成器表达式一起使用,如此

>>> next(idx for idx, char in enumerate("Hello World") if char in 'eo')
1

它会给出eo的第一个字符的索引。

注意:如果字符串中没有字符,则会失败。因此,您可以选择传递默认值,例如

>>> next((idx for idx, char in enumerate("Hello World") if char in 'eo'), None)
1
>>> next((idx for idx, char in enumerate("Hi") if char in 'eo'), None)
None

答案 1 :(得分:0)

或者,您可以对每个字符执行find,然后取所有结果中的最小值(丢弃-1,除非所有结果都是-1):

def first_index(string, search_chars):

    finds = [string.find(c) for c in search_chars]
    finds = [x for x in finds if x >= 0]

    if finds:
        return min(finds)
    else:
        return -1

这会产生:

>>> first_index("Hello World", "eo")
1
>>> first_index("Hello World", "xyz")
-1

答案 2 :(得分:0)

您可以使用collections.defaultdict

>>> import collections
>>> my_dict = collections.defaultdict(list)
>>> for i,x in enumerate("hello world"):
...     if x in "eo":
...         my_dict[x].append(i)
... 
>>> my_dict
defaultdict(<type 'list'>, {'e': [1], 'o': [4, 7]})
>>> my_dict['e'][0]     # 1st  'e'
1
>>> my_dict['o'][0]     # 1st 'o'
4