>> positives([-2, 0, 3, 7, -1]) [3, 7] """ # 2 def char_counts(s: str) -> dict[str, int]: """ >>> char_counts("banana") {'b': 1, 'a': 3, 'n': 2} """ # 3 def top2(s: str) -> list[str]: """가장 많이 나온 문자 2개를, 많은 순서로. >>> top2("banana") ['a', 'n'] """ # 4 def group_by_initial(words: list[str]) -> dict[str, list[str]]: """첫 글자로 묶기. >>> group_by_initial(["apple", "avocado", "banana", "cherry"]) {'a': ['apple', 'avocado'], 'b': ['banana'], 'c': ['cherry']} """ # 5 def drain_front(xs: list[int]) -> tuple[int, list[int]]: """xs로 큐를 만들어 앞에서 하나 뺀다. (뺀 값, 남은 것들) >>> drain_front([10, 20, 30]) (10, [20, 30]) """"> >> positives([-2, 0, 3, 7, -1]) [3, 7] """ # 2 def char_counts(s: str) -> dict[str, int]: """ >>> char_counts("banana") {'b': 1, 'a': 3, 'n': 2} """ # 3 def top2(s: str) -> list[str]: """가장 많이 나온 문자 2개를, 많은 순서로. >>> top2("banana") ['a', 'n'] """ # 4 def group_by_initial(words: list[str]) -> dict[str, list[str]]: """첫 글자로 묶기. >>> group_by_initial(["apple", "avocado", "banana", "cherry"]) {'a': ['apple', 'avocado'], 'b': ['banana'], 'c': ['cherry']} """ # 5 def drain_front(xs: list[int]) -> tuple[int, list[int]]: """xs로 큐를 만들어 앞에서 하나 뺀다. (뺀 값, 남은 것들) >>> drain_front([10, 20, 30]) (10, [20, 30]) """"> >> positives([-2, 0, 3, 7, -1]) [3, 7] """ # 2 def char_counts(s: str) -> dict[str, int]: """ >>> char_counts("banana") {'b': 1, 'a': 3, 'n': 2} """ # 3 def top2(s: str) -> list[str]: """가장 많이 나온 문자 2개를, 많은 순서로. >>> top2("banana") ['a', 'n'] """ # 4 def group_by_initial(words: list[str]) -> dict[str, list[str]]: """첫 글자로 묶기. >>> group_by_initial(["apple", "avocado", "banana", "cherry"]) {'a': ['apple', 'avocado'], 'b': ['banana'], 'c': ['cherry']} """ # 5 def drain_front(xs: list[int]) -> tuple[int, list[int]]: """xs로 큐를 만들어 앞에서 하나 뺀다. (뺀 값, 남은 것들) >>> drain_front([10, 20, 30]) (10, [20, 30]) """">
from collections import ... # 필요한 것만 채워
# 1
def positives(xs: list[int]) -> list[int]:
"""
>>> positives([-2, 0, 3, 7, -1])
[3, 7]
"""
# 2
def char_counts(s: str) -> dict[str, int]:
"""
>>> char_counts("banana")
{'b': 1, 'a': 3, 'n': 2}
"""
# 3
def top2(s: str) -> list[str]:
"""가장 많이 나온 문자 2개를, 많은 순서로.
>>> top2("banana")
['a', 'n']
"""
# 4
def group_by_initial(words: list[str]) -> dict[str, list[str]]:
"""첫 글자로 묶기.
>>> group_by_initial(["apple", "avocado", "banana", "cherry"])
{'a': ['apple', 'avocado'], 'b': ['banana'], 'c': ['cherry']}
"""
# 5
def drain_front(xs: list[int]) -> tuple[int, list[int]]:
"""xs로 큐를 만들어 앞에서 하나 뺀다. (뺀 값, 남은 것들)
>>> drain_front([10, 20, 30])
(10, [20, 30])
"""
# 1 리스트 xs 에서 0보다 큰 것만 골라 새 리스트
def positives(xs: list[int]) -> list[int]:
'''
>>> positives([-2, 0, 3, 7, -1])
[3, 7]
'''
return [x for x in xs if x > 0]
Python List Comprehension 사용.
#2 문자열 s 에서 각 문자의 등장 횟수 세기
def char_counts(s: str) -> dict[str, int]:
'''
>>> char_counts("banana")
{'b': 1, 'a': 3, 'n': 2}
'''
my_dict = {}
for i in s:
if i in my_dict:
my_dict[i] += 1
else:
my_dict[i] = 1
return my_dict
#2 dict.get() 사용
def char_counts(s: str) -> dict[str, int]:
'''
>>> char_counts("banana")
{'b': 1, 'a': 3, 'n': 2}
'''
d = {}
for i in s:
d[i] = d.get(i, 0) + 1
return d
dict는 set의 역할도 한다. 둘 다 해시테이블을 사용한다. 해시맵이냐 해시셋이냐의 차이일 뿐이다. 그래서 if i in my_dict를 쓰면 된다.
d.get(i, 0)은 i가 해시테이블에 있으면 그 value를 가져오고, 없으면 0을 반환한다. 이런 상황에서 정말 유용하게 쓰인다.