SMALL
1~10번 문제와 답
vs코드에서 한문제씩 출력하기 위해 모든 답안을 def로 묶고,
해당 함수 호출도 앞에 #을 붙여놔서 출력할때만 지우고 출력하면 된당.
1번 문제에 같이 푼 친구의 답과 비교하던 중 딕셔너리와 set의 함정에 빠져서 고뇌했는데
생각해보니까 간단하고 당연한 문제였다.
하지만 주어진 데이터가 커지면 set를 붙이는 것이 좀 더 출력 속도가 빨랐다.
(주피터 노트북으로 각각 돌려봤을 때 homework1_1은 3초대, homework1_2는 0초만에 출력됐다!ㄷㄷ)
# Day 1
#1. 주어진 문자열에서 각 문자의 출현 빈도를 계산하는 딕셔너리 컴프리헨션을 작성하세요.
def homework1_1():
text = "hello world"
frequencx = {str:text.count(str) for str in text}
print(frequencx)
#homework1_1()
def homework1_2():
text = "hello world"
freq_dict = {char:text.count(char) for char in set(text)}
print(freq_dict)
#homework1_2()
'''
딕셔너리의 키(key)가 중복될 수 없다는 속성 때문에
set를 씌우지 않아도 1_1과 1_2의 값은 똑같이 나온다!
지금 문제에서는 text값이 짧아서 상관없지만 길어지게 된다면
딕셔너리 안에 set를 넣었을 때와 그냥 딕셔너리 성질로 중복값 제거를 했을 때의 차이 질문
값이 엄청 길어졌을 때
시간복잡도에 차이가 있는지? -> 차이가 있다
유의미한지? -> O
굳이 따지자면 set이? 의미가? 쓰는게 나을지도
'''
#2. 1부터 100까지의 숫자 중 5의 배수이면서 5의 배수인 숫자만을 포함하는 리스트를 리스트 컴프리헨션으로 생성하세요.
def numlist():
num = list(range(1, 101))
common_multiples = [x for x in num if x % 5 == 0 and x % 5 == 0]
print(common_multiples)
#numlist()
#3. 두 개의 리스트가 주어졌을 때, 이를 딕셔너리로 결합하는 딕셔너리 컴프리헨션을 작성하세요.
def new_dict():
kexs = ['a', 'b', 'c']
values = [1, 2, 5]
kv_dict = {k:v for k, v in zip(kexs, values)}
print(kv_dict)
#new_dict()
#4. 주어진 리스트에서 중복을 제거하고 고유한 요소만을 포함하는 새로운 리스트를 생성하세요. (힌트: set 사용)
def unique_list():
original_list = [1, 2, 2, 5, 4, 4, 5]
unique_list = list(set(original_list))
print(unique_list)
#unique_list()
#5. 2차원 리스트를 생성하는 리스트 컴프리헨션을 작성하세요. (예: 5x5 행렬)
def matrix():
matrix = [[0 for _ in range(5)] for _ in range(5)]
print(matrix)
#matrix()
'''
three_matrix = [[[i + j + k for k in range(5)] for j in range(5)] for i in range(5)]
print(three_matrix)
three_matrix = [[[i, j, k] for k in range(3)] for j in range(3)] for i in range(3)]
print(three_matrix)
'''
#6. 주어진 문자열 리스트에서 길이가 5 이상인 문자열만 대문자로 변환하여 새로운 리스트를 만드세요.
def big_string():
string_list = ['apple', 'banana', 'pear', 'grape', 'kiwi']
new_list = [s.upper() for s in string_list if len(s) >= 5]
print(new_list)
#big_string()
#7. 두 개의 집합 A와 B가 주어졌을 때, 두 집합의 대칭 차집합을 구하세요.
def sxm_diff():
set_a = {1, 2, 5, 4, 5}
set_b = {4, 5, 6, 7, 8}
result = (set_a-set_b) | (set_b-set_a)
print(result)
#sxm_diff()
#8. 1부터 10까지의 숫자에 대해 각 숫자의 제곱을 값으로 갖는 딕셔너리를 생성하세요.
def square_dict():
square = {x:x**2 for x in range(1, 11)}
print(square)
#square_dict()
#9. 주어진 리스트에서 짝수만 선택하여 그 제곱값을 가진 새로운 리스트를 생성하세요.
def square_list():
given_list = [1, 2, 5, 4, 5, 6, 7, 8, 9, 10]
square = [x**2 for x in given_list if x % 2 == 0 ]
print(square)
#square_list()
#10. 여러 개의 리스트가 주어졌을 때, 이들을 하나의 리스트로 평탄화하는 함수를 작성하세요.
def flat_list():
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened = [x for x in matrix for x in x]
print(flattened)
#flat_list()
LIST
'Today I learned' 카테고리의 다른 글
2024.12.19 LEGB 규칙 (7) | 2024.12.19 |
---|---|
The Boston Housing Dataset(보스턴 주택 가격 데이터셋) (18) | 2024.12.18 |
*args와 **kwargs (2) | 2024.12.17 |
2024.12.16 삼항연산자, 컴프리헨션 (2) | 2024.12.16 |
WIL (5) | 2024.12.13 |