find() VS in
find()와 in은 둘 다 문자열에서 찾고자 하는 문자열을 찾고자 할 때 사용하지만 find는 찾고자하는 문자열의 위치를 인덱스 값을 int 자료형으로, in은 찾고자하는 문자가 원래 문자열에 포함되었는지 여부를 boolean 자료형으로 리턴한다.
find()는 문자열에 사용하는 메소드로 문자열 내에 찾고자하는 문자의 인덱스를 반환한다.
- str.find("찾고자하는문자열")
str = "findletter" print(str.find("d")) # #결과 3
find()함수는 문자열의 앞에서부터 값을 찾아서 반환하기 때문에 찾고자 하는 문자열이 여러개 있더라도 하나의 인덱스만 반환한다.
str = "findletter" print(str.find("t")) # #결과 6 # 7 인덱스에도 t가 있으나 6만 확인 가능
find()함수를 사용해 문자열에 포함되어있지 않은 값을 찾으면 -1을 리턴한다.
str = "findletter" print(str.find("s")) # #결과 -1
in은 문자열 내에 찾고자 하는 문자열이 있는지 여부를 boolean값으로 반환한다.
- "찾고자하는 문자열" in str
str = "findletter" print("d" in str) print("s" in str) # #결과 True False
- 1~20까지의 숫자가 들어있는 리스트에서
- 3,6,9를 포함하는 요소를 찾아
- 해당 요소를 "짝"이라는 문자열로 변화하여 출력
in을 사용한 경우
numbers = list(range(1,21)) check_num = [3,6,9] numbers_369 = [*numbers] for idx, num in enumerate(numbers): num_str = str(num) #숫자 안에 3,6,9있는지 확인 if ("3" in num_str or "6" in num_str or "9" in num_str): numbers_369[idx] = "짝" print (numbers_369) # #결과창 [1, 2, '짝', 4, 5, '짝', 7, 8, '짝', 10, 11, 12, '짝', 14, 15, '짝', 17, 18, '짝', 20]
find을 사용한 경우
numbers = list(range(1,21)) check_num = [3,6,9] numbers_369 = [*numbers] for idx, num in enumerate(numbers): num_str = str(num) #숫자 안에 3,6,9있는지 확인 if (0 <= num_str.find("3") or 0 < num_str.find("6") or 0 <= num_str.find("9")): numbers_369[idx] = "짝" print (numbers_369) # #결과창 [1, 2, '짝', 4, 5, 6, 7, 8, '짝', 10, 11, 12, '짝', 14, 15, '짝', 17, 18, '짝', 20]
여기서 find 함수가 boolean을 반환한다고 생각하고 코딩하면 아래와 같은 오류가 생길 수 있음!
- find를 "잘못" 사용한 경우
#잘못된 예 numbers = list(range(1,21)) check_num = [3,6,9] numbers_369 = [*numbers] for idx, num in enumerate(numbers): num_str = str(num) #숫자 안에 3,6,9있는지 확인 if (num_str.find("3") or num_str.find("6") or num_str.find("9")): numbers_369[idx] = "짝" print (numbers_369) # #결과창 ['짝', '짝', '짝', '짝', '짝', '짝', '짝', '짝', '짝', '짝', '짝', '짝', '짝', '짝', '짝', '짝', '짝', '짝', '짝', '짝']
- 3,6,9를 가지지 않는 요소에서 find함수가 -1을 출력하여 boolean값이 참이 됨
- 3이 0번 인덱스를 가지는 경우에만 False가 되지만 if문 에서 or 연산자를 통해 3,6,9를 모두 검증하므로 결국 요소 3도 참이되어 모든 값이 참으로 바뀜
Thank you for sharing. I also have something to share that I would like to tell you https://timeis24.com