[Python] 파이썬으로 문자열 위치 알기 (find, index)

    파이썬에서 문자열의 위치값을 알아내는 방법으로 find 함수와 index 함수 2가지가 존재한다. java를 주로 사용하는 분들은 indexOf를 구현하기 위해서 파이썬의 index 함수를 생각할 수 있지만 java의 indexof와 유사한 것은 find며 index 함수는 약간 다르다

     

    파이썬, 문자열의 위치를 찾는 find/index 함수

     

    위치값 찾기

    값이 있을 경우

    comp_data = '삼성전자,LG전자,현대자동차,CJ,SK텔레콤'
    
    print(comp_data.find('전자'))
    print(comp_data.index('전자'))
    
    # 2
    # 2

     

    위 예시에서는 전자라는 문자열을 찾는데 결과는 2가 나왔다. 값은 처음에 나온 값을 리턴하며 더이상 탐색을 하지 않고 종료된다. 전자라는 단어가 문자열에 포함되어 있기 때문에 find와  index 결과가 동일하다.

     

    값이 없을 경우

    comp_data = '삼성전자,LG전자,현대자동차,CJ,SK텔레콤'
    
    print(comp_data.find('네이버'))
    
    # -1

    find의 경우 값이 없을 경우 -1값을 리턴한다. Java를 사용하는 사람들이라면 indexOf와 유사하다 느낄 것이다.

     

    comp_data = '삼성전자,LG전자,현대자동차,CJ,SK텔레콤'
    
    print(comp_data.index('네이버'))
    
    Traceback (most recent call last):
      File "C:/project/steel/python/lotto.py", line 4, in <module>
        print(comp_data.index('네이버'))
    ValueError: substring not found

    그러나, 명칭에서 더 유사한 index를 사용해서 값이 없을 경우 ValueError가 떨어진다. index를 사용해서 처리를 할때에는 try ~ except 구문을 써서 감싸야 된다.

    comp_data = '삼성전자,LG전자,현대자동차,CJ,SK텔레콤'
    
    try:
        print(comp_data.index('네이버'))
    except ValueError:
        print(-1)
        
    # -1

     

     

    값을 계속 호출하고 싶을 경우

    comp_data = '삼성전자,LG전자,현대자동차,CJ,SK텔레콤'
    
    index = 0
    while index > -1:
        index = comp_data.find('전자', index)
        if index > -1:
            print(index)
            index += len('전자')
    
    # 2 7

    find의 2번째 인자값에 start_index 값을 지정할 수 있다. 이 방식을 사용하면 loop를 돌면서 값을 계속 찾아낼 수 있다. index 함수의 경우 except가 발생할 수 있기 때문에 로직이 살짝 다르다

     

    comp_data = '삼성전자,LG전자,현대자동차,CJ,SK텔레콤'
    
    index = 0
    while index > -1:
        try:
            index = comp_data.index('전자', index)
            print(index)
            index += len('전자')
        except ValueError:
            break
    
    # 2 7

    find와 다르게 index의 경우 -1 대신 except가 발생하기 때문에 그럴 경우 그대로 종료시켜 버리면 된다. 즉, try 값으로 넘어간다는 것은 계속 찾고 있다는 의미이기 때문에 if 조건이 들어가지 않는다. 결국 find와 index의 차이는 -1 이 떨어지는 것인지 try ~ except가 떨어지는지의 차이라 할 수 있다. 

     

     

    반응형

    댓글

    Designed by JB FACTORY