0. 유용한 파이썬 내장 메서드
1) eval()
수학 수식이 "문자열 포맷"으로 들어오면, 해당 수식을 계산한 결과를 반환한다.
result = eval("(3 + 5) * 7")
print(result) # 56
2) 딕셔너리.items()
딕셔너리에 있는 키와 값들의 쌍을 얻을 수 있다.
car = {"name" : "BMW", "price" : "7000"}
car.items() -> [('name', 'BMW'), ('price', '7000')]
3-1) input().split(':')
콜론 ':' 기호를 기준으로 자른다.
3-2) print(?, ?, sep=':')
콜론 ':' 기호를 사이에 두고 값을 출력한다. sep는 분류기호(seperator)를 의미한다.
4) 문자열.isdigit() 는 문자열이 '숫자로만' 이루어져 있는지 확인한다.
문자가 '단 하나라도' 있다면 False를 반환하고, 모든 문자가 '숫자로만' 이루어져 있어야 True를 반환한다.
따라서서 음수를 나타낼 때의 - 와, 실수를 나타낼 때의 . 같은 소숫점들도 숫자가 아니라고 판정하기 때문에 False를 반환한다.
즉, 음수나 실수 문자열을 판별할 수 없다!
5) 문자열.isalpha() 는 문자열이 '알파벳' 또는 '한글'로 되어있는지 확인한다.
단, 문자열에 [공백, 기호, 숫자]가 들어있다면 False를 반환한다.
6) 문자열.isalnum()은 문자열이 전부 '알파벳' 또는 '한글' 또는 '숫자'인지 확인한다.
따라서 [공백, 기호]가 들어있다면 False를 반환할 것이다.
1. 딕셔너리형에서 key값과 value값 서로 바꾸기
map()의 reversed와 items()를 이용해서 key값과 value값을 서로 바꾼 새로운 딕셔너리를 만들 수 있다.
reversed_pokemon_dict = dict(map(reversed, pokemon_dict.items()))
2. 딕셔너리[key] vs 딕셔너리.get(key)
3. 유용한 itertools
3-1. groupby()
연속으로 같은 (값)들을 묶어주는 데 쓴다.
from itertools import groupby
arr = [1, 2, 3, 3, 3, 3, 2, 1] # 차례대로 같은 구슬이 연속해있다면 그룹으로 묶는다.
for bead, gr in groupby(arr):
print(f"bead : {bead}, gr : {list(gr)}") # EX) bead : 3, list(gr) : [3, 3, 3, 3]
3-2. chain.from_iterable()
중첩된 리스트들을 1차원 리스트로 나열해준다.
from itertools import chain
# arr[b]는 폭발하는 단계가 끝난 최종 구슬들이 저장되어 있고,
# 이것을 다시 groupby 하면 [(1, 1), (3, 3), (1, 2) ...] 이런 식으로 저장된다.
# chain.from_iterable()은 이렇게 중첩된 리스트(n차원 리스트)들을 1차원 리스트로 나열해준다.
# -> 즉, [1, 1, 3, 3, 1, 2] 이렇게 변환한다. (그리고 꼭 list()나 zip()으로 캐스팅해야 한다!)
next = chain.from_iterable((len(list(gr)), bead) for bead, gr in groupby(arr[b]))
for (y, x), val in zip(board_num_list[1:], next):
game_board[y][x] = val
3-3. product
permutations 와 같이 리스트 같은 iterable 객체에서 r개의 데이터를 뽑아 일렬로 나열하는데,
이때 원소를 중복해서 뽑는다는 차이점이 있다.
product 객체를 초기화할 때는 뽑고자 하는 데이터의 개수를 "repeat" 속성값으로 넣어준다.
from itertools import product
data = ["A", "B", "C"] # 데이터 준비
result = list(product(data, repeat = 2))
print(result)
# [('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'B'), ('B', 'C'), ('C', 'A'), ('C', 'B'), ('C', 'C')]
3-4. combinations_with_replacement
combinations 와 같이 리스트 같은 iterable 객체에서 r개의 데이터를 뽑는데,
이때 원소를 중복해서 뽑는다는 차이점이 있다.
from itertools import combinations_with_replacement
data = ["A", "B", "C"] # 데이터 준비
result = list(combinations_with_replacement(data, 2))
print(result)
# [('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'B'), ('B', 'C'), ('C', 'C')]
4. 유용한 collections
4-1. 딕셔너리를 한 번에 초기화하려면? -> defaultdict
defaultdict()의 인수로 어떤 자료형(int, list 등등)을 넣으면, 값(value)이 그 자료형인 딕셔너리를 생성해준다.
※ 특히 집계용 코드를 작성할 때는 항상 초깃값에 신경써야 하는데, defaultdict는 이러한 번거로움을 피할 수 있다.
from collections import defaultdict
text = "Life is too short, You need python."
d = defaultdict(int) // 값(value)의 자료형을 int로 설정했다
for c in text:
d[c] += 1
print(dict(d))
{'L': 1, 'i': 2, 'f': 1, 'e': 3, ' ': 6, 's': 2, 't': 3, 'o': 5,
'h': 2, 'r': 1, ',': 1, 'Y': 1, 'u': 1, 'n': 2, 'd': 1, 'p': 1, 'y': 1, '.': 1}
4-2. Counter
리스트와 같은 iterable 객체가 주어졌을 때, 해당 객체 내부의 원소가 몇 번씩 등장했는지를 알려준다.
from collections import Counter
counter = Counter(['red', 'blue', 'red', 'green', 'blue', 'blue'])
# Counter 객체도 딕셔너리와 비슷하게 key-value의 개념으로 접근하면 된다
print(counter['blue']) # 3
print(counter['green']) # 1
print(dict(counter)) # 딕셔너리로 변환, {'red': 2, 'blue': 3, 'green': 1}
5. 유용한 bisect (이진 탐색 라이브러리)
from bisect import bisect_left, bisect_right 를 통해서 사용할 수 있다.
bisect_left(arr, x)
x보다 같거나 큰 첫번째 값의 위치를 반환한다.
또는 정렬된 순서를 유지하면서, 리스트 arr에 데이터 x를 넣을 수 있는 가장 왼쪽 인덱스를 찾는 것이다.
bisect_right(arr, x)
x보다 큰 첫번째 값의 위치를 반환한다.
또는 정렬된 순서를 유지하면서, 리스트 arr에 데이터 x를 넣을 수 있는 가장 오른쪽 인덱스를 찾는 것이다.
따라서 bisect_right() - bisect_left()를 하면 리스트에 target 값, 또는 원하는 범위의 값이 몇 개가 있는지도 알 수 있다.
from bisect import bisect_left, bisect_right
# 값이 [left_value, right_value] 범위 안에 있는 데이터의 개수를 반환한다
def count_by_range(arr, left_value, right_value):
right_index = bisect_right(arr, right_value)
left_index = bisect_left(arr, left_value)
return right_index - left_index
arr = [1, 2, 3, 3, 3, 3, 4, 4, 8, 9]
print(count_by_range(arr, 4, 4)) # 2
print(count_by_range(arr, -1, 3)) # 6
6. math 라이브러리
6-1. factorial(x)
x! 값을 반환한다.
import math
print(math.factorial(5)) # 120
6-2. gcd(a, b)
a와 b의 "최대 공약수"를 반환한다.
import math
print(math.gcd(21, 14)) # 7
※ 그외에도 math.pi 는 파이(pi)를 제공하고, math.e 는 자연상수 e를 제공한다.
'알고리즘과 코딩 테스트 > 파이썬 문법' 카테고리의 다른 글
심화 알고리즘 (0) | 2023.02.06 |
---|