CodingTest/Python Grammar Notes

[Python] 위치(인덱스) 찾기 (find(), index())

조 수빈 2023. 3. 10. 08:45

백준 1167 트리의 지름

특정 원소가 리스트의 몇 번째 인덱스에서 등장하는지 찾아야 했다.
indexOf()가 안되길래 검색해보니 indexOf()는 자바스크립트 문법이었다..
이참에 잘 정리해두자.

위치(인덱스) 찾는 함수 2가지

  1. find()

     a = 'abcdab'
     print(a.find('a')) # 0
     print(a.find('c')) # 2
     print(a.find('bcd')) # 1 => 문자열의 위치를 찾을 수도 있음
     print(a.find('a', 2)) # 4 => 시작점만 지정한 경우
     print(a.find('a', 2, 5)) # 4 => 시작점과 끝점을 지정한 경우
     print(a.find('a', 2, 4)) # -1 => 끝점이 4인 경우 끝 범위가 3까지임을 알 수 있음 + 찾는 문자가 없는 경우 -1 반환
  2. index()

     a = 'abcdab'
     print(a.index('a')) # 0
     print(a.index('c')) # 2
     print(a.index('bcd')) # 1
     print(a.index('a', 2)) # 4
     print(a.index('a', 2, 5)) # 4
     # print(a.index('a', 2, 4)) # 에러 발생!!
    
     # 리스트에서도 사용 가능
     b = [1, 2, 3]
     print(b.index(2)) # 1   
    
     # 튜플에서도 사용 가능
     c = ('a', 'b', 'c', 'd')
     print(c.index('c')) # 2

공통점

처음 검색된 위치를 반환한다.
결과값은 0부터 시작하는 숫자다.
시작 위치와 끝 위치를 지정해줄 수 있다. ex) 변수.find('찾는 문자', 시작 위치, 끝 위치)

차이점

찾는 문자가 없는 경우
- find(): -1 반환
- index(): ValueError 에러 발생

사용 가능한 자료형
- find(): 문자열
    - 리스트, 튜플, 딕셔너리 자료형에서 사용 시 에러 발생
- index(): 문자열, 리스트, 튜플
    - 딕셔너리 자료형에서 사용 시 에러 발생

✅ 참고

처음 검색된 위치를 반환하는데, 다른 중복되는 값의 인덱스를 모두 구하고 싶은 경우 filter() 함수를 사용하자
filter(function, iterable)

a = [1, 2, 3, 4, 1, 1, 2]

print(a.index(1)) # 0

all_a_index = list(filter(lambda x: a[x] == 1, range(len(a))))
print(all_a_index) # [0, 4, 5]