요구사항
1. 참가자 명단에서 완주자 명단에 없는 선수 찾기. 단, 참가자명단에는 동명이인이 있을 수 있다.
2. 완주하지 못한 선수의 이름을 반환하기
3. 위 내용을 구현한 함수를 find_non_completer 로 작성하기
예시 데이터
participant = ["mike", "lisa", "tom", "lisa"]
completion = ["tom", "mike", "lisa"]
동명이인을 거르기 위한 방법엔 두가지가 있는데
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
,첫번째 인자에서 넣은 키가 없을때 '디폴트값'
)
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)]