[Python] 동명이인 찾기

김희정·2024년 1월 20일
0

PYTHON

목록 보기
1/2

마라톤 미 완주자 찾기

요구사항
1. 참가자 명단에서 완주자 명단에 없는 선수 찾기. 단, 참가자명단에는 동명이인이 있을 수 있다.
2. 완주하지 못한 선수의 이름을 반환하기
3. 위 내용을 구현한 함수를 find_non_completer 로 작성하기
예시 데이터
participant = ["mike", "lisa", "tom", "lisa"]
completion = ["tom", "mike", "lisa"]

동명이인을 거르기 위한 방법엔 두가지가 있는데

  1. 딕셔너리를 이용 방법
def find_non_completer(participant, completion):
	my_dict = {}
    for name in participant:
    	my_dict[name] = my_dict.get(name, 0) + 1 # 네임이 있으면 name을 넣어주고 없으면 0 할당
   #print(my_dict) >>> {'mike' : 1, 'lisa' : 2, 'tom' : 1}
   for name2 in completion:
   		my_dict[name2] = my_dict[name2] -1
   for name3 in my_dict:
       if my_dict[name3] == 1:
           return name3
           
find_non_completer(participant, completion)

여기서 get() 메소드는

딕셔너리 이름.get(찾고자 하는 key, 첫번째 인자에서 넣은 키가 없을때 '디폴트값')

  1. Counter 모듈 이용 방법
from collections import Counter

# Counter(participant)  >>>>  Counter({'lisa': 2, 'mike': 1, 'tom': 1}) 각 밸류 갯수 세어줌
result = Counter(participant) - Counter(completion)
answer = list(result.keys())
print(answer)

리스트나 셋을 인자로 넘기면 각 항목을 키로 해서 개수를 세어준다.

예시
from collections import Counter

hi1 = ['hi', 'hey', 'heyy', 'hey', 'hi', 'hello', 'hi']
hi2 = ['hey', 'hi', 'heyy']

Counter(hi1)
#>>> Counter({'hi': 3, 'hey': 2, 'heyy': 1, 'hello': 1})

Counter(hi1) - Counter(hi2)
#>>> Counter({'hi': 2, 'hey': 1, 'hello': 1})

Counter(hi1).most_common(1)  # 인사 넣은 만큼 상위 요소 출력 
#>>> [('hi', 3)]
profile
데이터 애널리스트가 되고 싶은

0개의 댓글