[Pre-course] 2021. 10. 11
Python
Pre-course 문제와 함께하는 헛갈리는 개념 바로잡기
1. Looping Dictionary
Input으로 주어진 list의 각 요소(element)가 해당 list에 몇번 나타나는지 수를 dictionary로 만들어서 return해주세요. Dictionary의 key는 list의 요소 값이며 value는 해당 요소의 총 빈도수 입니다.
예를 들어, 다음과 같은 list가 input으로 주어졌다면:my_list = ["one", 2, 3, 2, "one"]
다음과 같은 dictionary가 return 되어야 합니다.
{ "one" : 2, 2 : 2, 3: 1 }
문제 해결 순서를 생각해보자면
my_list
의 중복값을 제거한다- 고유값을
dictionary
의key
값에 넣는다 key
값이my_list
에서 중복되는 횟수를 'value'값에 넣는다
def get_occurrence_count(my_list):
my_dict = {}
unique_list = list(set(my_list))
# 함수를 선언한 후 return 될 빈 dictionary를 먼저 생성했다
# list(set(my_list))를 통해 중복값이 제거된 list를 생성했다
for i in unique_list:
my_dict[i] = my_list.count(i)
return my_dict
# for문을 통해 고유값을 key(my_dict[i])값에, 빈도수를 value(my_list.count(i))값에 넣었다
print(get_occurrence_count(my_list))
# {2: 2, 3: 1, 'one': 2} 출력이 잘 되는 것을 확인할 수 있다
해당 풀이에서 아쉬운 점은 set
을 이용해서 그런지 순서가 변경되었다는 점이다
그렇다면 list
의 순서를 건드리지 않는 중복값 제거방법은 또 뭐가 있을까?
검색을 하다가 for
문을 이용한 방법과 dictionary
를 이용한 방법을 찾게 되었다
- for문 이용
result = []
for value in arr:
if value not in result:
result.append(value)
- dictionary 이용
result1 = dict.fromkeys(arr)
result2 = list(result1)
*dict.fromkeys(iterable): 인자로 들어온 iterable
데이터를 key
값으로 해서 딕셔너리 자료형을 만들어 주는 작업을 하는 메서드
1번은 이전에 몇 번 써봤으니 2번을 이용해서 다시 풀어보자
def get_occurrence_count(my_list):
my_dict = dict.fromkeys(my_list)
# dict.fromkeys(my_list)를 통해 중복값이 제거된 dictionary를 생성했다
for i in my_dict:
my_dict[i] = my_list.count(i)
return my_dict
# for문을 통해 my_dict 각각의 key값에 해당하는 value값에 빈도수(my_list.count(i))를 넣었다
print(get_occurrence_count(my_list))
# {'one': 2, 2: 2, 3: 1} 출력이 잘 되는 것을 확인할 수 있다
2. More Complex Function Parameters
what_is_my_full_name 함수는 주어진 parameter중 first_name 과 last_name 이라는 parameter를 조합하여 full name을 return 해주어야 합니다.
예를 들어, first_name이 "우성" 이고 last_name 이 "정" 이면 "정 우성" 라고 return 하면 됩니다.
Last name과 first name 사이에 space(빈칸)이 들어가 있어야 합니다.
만일 last_name이 없거나 first_name이 없으면 둘 중하나만 return 하면 됩니다.
예를 들어, last_name이 없으면 "우성" 이라고 이름만 return 하면 됩니다,
마지막으로, last_name과 first_name 둘다 없으면 "Nobody" 라고 return 하면 됩니다.
해당 문제는 **kwargs
를 사용하여 key
와 value
값을 조건에 맞게 return
하면 된다
def what_is_my_full_name(**kwargs):
for name in kwargs:
# 함수를 선언하고 for문을 통해 이름을 return한다
if ("first_name" in kwargs) and ("last_name" in kwargs):
return f'{kwargs["last_name"]} {kwargs["first_name"]}'
# first_name과 last_name이 둘 다 존재할 때
elif ("first_name" in kwargs) and ("last_name" not in kwargs):
return f'{kwargs["first_name"]}'
# first_name만 존재할 때
elif ("first_name" not in kwargs) and ("last_name" in kwargs):
return f'{kwargs["last_name"]}'
# last_name만 존재할 때
return "Nobody"
# if문에서 return할 값이 없을 때
print(what_is_my_full_name(first_name = "우성", last_name = "정"))
# 정 우성
이 문제는 한 번에 풀지 못하고 검색과 질문을 통해 해결했는데.. 슬픈 일이 하나 있었다
검색을 통해 해답을 찾았을 때 if
문의 return
값이 return f"""{kwargs["last_name"]} {kwargs["first_name"]}"""
였다
구조는 이해를 했는데 왜 """
를 사용했는지 도저히 이해가 되지 않아서 다른 분에게 질문을 했더니 "last_name"
과 "first_name"
에서 "
가 이미 사용되서 '
또는 """
를 사용해야 되는 걸 알게되었다..
정말 기초적인 지식인데 바보 같이 붙잡고 고민하고 있던건지..
더 열심히 하자 😥
Author And Source
이 문제에 관하여([Pre-course] 2021. 10. 11), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@gyuls/Pre-course-2021.-10.-11저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)