2017-12-18 33 views
1

문자열 목록이 있는데, 문자열 목록에서 찾고있는 부분 문자열의 첫 글자의 위치를 ​​찾으려고합니다. . find() 메서드를 사용하여이 작업을 수행하지만 첫 번째 문자의 위치를 ​​인쇄하려고하면 파이썬은 올바른 위치를 반환하지만 그 후에 부분 문자열을 찾을 수없는 것처럼 -1을 throw합니다. 그것을 찾은 후에. 올바른 값 다음에 -1을 반환하지 않고 하위 문자열의 첫 번째 문자의 위치를 ​​반환하는 방법을 알고 싶습니다.문자열 목록에서 서브 문자열의 첫 글자의 위치 찾기 (파이썬 3)

mylist = ["blasdactiverehu", "sdfsfgiuyremdn"] 

word = "active" 

if any(word in x for x in mylist) == True: 
    for x in mylist: 
     position = x.find(word) 
     print(position) 

출력은 다음과 같습니다 :

5 

내가이 관련이있을 수 있습니다 생각 :

5 
-1 

내가 출력 그냥 될 것으로 예상 여기

내 코드입니다 사실 루프는 목록의 모든 문자열에 대한 하위 문자열을 검색하고 위치를 찾은 후에도 여전히 더 많은 것을 검색하지만 물론 하위 문자열 "활성"이 하나만 있기 때문에 오류가 발생하지만 하나의 하위 문자열을 찾은 후 검색을 중지하는 방법을 모르겠습니다. 도움이된다면 고맙습니다.

+0

을 할 수 있도록 그런데

는, 필요하면 같은 내 대답을 표시 할 수 있으면 알려 주시기 바랍니다, 진정한 == 확인 없습니다 또는 더 많은 도움이 필요하면 동일한 문제를 가진 다른 사람들이 그것에 의지 할 수 있습니다. –

답변

1

실제로 단어에 하위 문자열이 포함되어 있으므로 각 단어에 대한 검사가 수행되므로 원하는대로 코드가 작동하지 않습니다. 발전기를 사용하지 않는 것이 좋은 방법입니다. 보다 구체적으로, 다음()

default_val = '-1' 
position = next((x.find(word) for x in mylist if word in x), default_val) 
print(position) 

그것은 단순히 당신이 목록 '으로 myList'에서, 조건 if word in x을받을 것이다 첫 번째 문자열 "X"에 대한 문자열 "단어"의 위치를 ​​제공 할 것입니다. 어떤이(), 이미 참/거짓 반환 사용하는 경우 당신은 단순히 if any(): ...