2015-02-02 3 views
1

e 또는 o 문자의 첫 번째 항목을 어떻게 찾을 수 있습니까?여러 부분 문자열이있는 find() - Python

나는 이런 일을하고 싶지 :

my_string = "Hello World" 
x = my_string.find('e' or 'o',my_string) 
print x # 1 
그것은 하나 e 또는 첫 번째 문자의 인덱스를 줄 것이다이

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

같은 발전기 식

+0

그것의 명확하지 않다, 당신은 둘째로 e 또는 o의 출현을 원한다, 아니면 오직 하나만 원할 것인가 ?? – Hackaholic

+2

상당히 명확합니다. 첫 번째 문장은 문자 "e"나 "o"중 첫 번째 문자를 어떻게 찾을 수 있습니까? –

답변

1

사용 enumerate 기능, o.

참고 : 문자열에 문자가 없으면 오류가 발생합니다. 그래서, 당신은 선택적으로 각 문자에 find을하고 모든 결과의 최소 걸릴 수도, 또는이

>>> 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 
+0

'next '의 용도는 무엇입니까? –

+0

@AvinashRaj'enumerate'에 전달 된 인수는 [generator expression] (https://docs.python.org/2/reference/expressions.html#generator-expressions)라고합니다. 이것은 일반적인 함수와 비슷하지만, 그 값으로부터 [next'] (https://docs.python.org/2/reference/expressions.html#generator.next) 값을 요구할 때마다 값을 반환 할 수 있습니다. 그것은 다 써 버린다. – thefourtheye

0

같은 기본 값을 전달할 수 있습니다 그들 모두가 -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 
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 
관련 문제