숫자끼리 비교하는 연산과 문자끼리 비교하는 연산 중 왜 문자끼리 비교하는 연산이 상대적으로 불리한지 이유에 대해서 정리해보고 샘플 코드를 구현해서 제출하기
파이썬에서 문자열은 문자들의 시퀀스이다. 시퀀스 자료형의 비교는 사전식 순서를 사용한다. 먼저 첫 두 항목을 비교해서 다르면 그 결과를 내고 같다면 다음 두 항목을 비교하며 이런 식으로 어느 한 시퀀스가 소진될 때까지 계속한다. 두 시퀀스의 모든 항목이 같다고 비교되면 시퀀스들은 같은 것으로 취급된다. 문자열의 사전식 배열은 개별 문자들의 순서를 정하는데 유니코드 코드 포인트 숫자를 사용한다.
str1 = "바나나"
str2 = "바구니"
str3 = "사과"
print(str1 == str2) # False
print(str1 > str2) # True
print(str1 > str3) # False
print(ord("나"), ord("구")) # 45208 44396
print(ord("바"), ord("사")) # 48148 49324
바나나와 바구니가 같은지 비교했을 때, 첫 번째 문자인 바는 같으니 그 다음 문자인 "나"와 "구"를 비교할 텐데, 내장함수인 ord
로 해당 문자의 유니코드 코드 포인트를 나타냈을 때 각각 45208
44396
을 반환했다. 즉 "나"의 코드 포인트가 "구"보다 크기 때문에 ==
비교일 때는 False
를 반환하고 >
비교일 때는 True
를 반환했다.
이런 과정이 있기 때문에 숫자끼리 비교하는 연산보다 문자끼리 비교하는 연산이 불리할 것 같다고 생각이 든다.
https://docs.python.org/ko/3/tutorial/datastructures.html#comparing-sequences-and-other-types
파이썬으로 일부 중복되는 element를 저장하고 최소 element가 10개이상 되는 배열을 만든다. 그리고 set() 구문 없이 오로지 for in 문으로 배열의 중복된 값을 없애는 코드를 작성하기
fruits = ["사과", "바나나", "체리", "파인애플", "파인애플", "파인애플", "바나나", "블루베리", "망고", "수박", "오렌지", "사과", "바나나", "체리", "딸기", "한라봉", "딸기", "블루베리"]
new_fruits = []
for i in fruits:
if not i in new_fruits:
new_fruits.append(i)
print(fruits) #['사과', '바나나', '체리', '파인애플', '파인애플', '파인애플', '바나나', '블루베리', '망고', '수박', '오렌지', '사과', '바나나', '체리', '딸기', '한라봉', '딸기', '블루베리']
print("중복된 과일들의 개수: ", len(fruits)) # 중복된 과일들의 개수: 18
print(new_fruits) # ['사과', '바나나', '체리', '파인애플', '블루베리', '망고', '수박', '오렌지', '딸기', '한라봉']
print("중복제거된 과일들의 개수: ", len(new_fruits)) # 중복제거된 과일들의 개수: 10
본 후기는 정보통신산업진흥원(NIPA)에서 주관하는 <AI 서비스 완성! AI+웹개발 취업캠프 - 프론트엔드&백엔드> 과정 학습/프로젝트/과제 기록으로 작성 되었습니다.