반응형
itertools
- 반복되는 형태의 데이터 처리에 유용
- 특히 순열과 조합 라이브러리가 유용함.
순열
- 서로 다른 n개에서 서로 다른 r개를 뽑아 순서대로 나열
from itertools import permutations
data = ['A', 'B', 'C']
result = list(permutations(data, 3))
print(result)
#[('A', 'B', 'C'), ('A', 'C', 'B'), ('B', 'A', 'C'),
# ('B', 'C', 'A'), ('C', 'A', 'B'), ('C', 'B', 'A')]
중복 순열
from itertools import product
data = ['A', 'B', 'C']
result = list(product(data, repeat=2)) # 2개를 뽑는 모든 순열 구하기 (중복 허용)
print(result)
# [('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'A'),
# ('B', 'B'), ('B', 'C'), ('C', 'A'), ('C', 'B'), ('C', 'C')]
조합
- 서로 다른 n개에서 순서에 상관없이 r개를 선택
from itertools import combinations
data = ['A', 'B', 'C']
result = list(combinations(data, 2))
print(result) # [('A', 'B'), ('A', 'C'), ('B', 'C')]
중복 조합
from itertools import combinations_with_replacement
data = ['A', 'B', 'C']
result = list(combinations_with_replacement(data, 2)) # 2개를 뽑는 모든 조합 구하기 (중복 허용)
print(result) # [('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'B'), ('B', 'C'), ('C', 'C')]
heapq
- 힙 자료구조 제공
- 우선순위 큐 기능 구현을 위해 사용
bisect
- 이진 탐색 기능 제공
collections
- deque(덱), counter(카운터) 등의 자료구조 포함
counter
- 등장 횟수를 세는 기능
- 리스트와 같이 반복 가능한 객체에서 내부 원소가 몇 번씩 등장했는지 알려줌
from collections import Counter
counter = Counter(['red', 'blue', 'red', 'green', 'blue', 'blue', 'blue'])
print(counter['blue']) # 4
print(counter['red']) # 2
print(counter['green']) # 1
print(dict(counter)) # dict로 자료형 변환! {'red': 2, 'blue': 4, 'green': 1}
math
- 필수적인 수학적 기능
- 팩토리얼, 제곱근, GCD, pi...
자주 사용되는 내장 함수
- eval() : 문자열의 수식을 계산해버림
result = eval("(3+5)*7")
print(result) # 56
- sorted() : 반복 가능한 객체에 대한 정렬 수행
result = sorted([9, 1, 3, 5, 2, 7])
reverse_result = sorted([9, 1, 3, 5, 2, 7], reverse=True) # 내림차순
print(result) # [1, 2, 3, 5, 7, 9]
print(reverse_result) # [9, 7, 5, 3, 2, 1]
표준 입출력
# input() : 한 줄의 문자열을 input
# map() : list의 모든 원소에 각각 특정 func apply
# 예시) 학생들의 점수가 공백을 기준으로 한 줄로 입력이 들어온다.
list(map(int, input().split()))
# 예시-1) 마찬가지로 공백을 기준으로 한 줄로 입력되어지는데 개수가 적을 때
# unpacking <- packing
a, b, c = map(int, input().split())
# map(int, ... ) 를 하는 이유 ?
# => 입력을 문자열로 받기 때문에
# more faster
import sys
# 한줄 입력 빠르게
data = sys.stdin.readline().rstrip()
print(data)
# f-string sample
answer = 7
# print("The answer is .. " + str(answer))
print(f"The answer is .. {answer}")
Lambda
array = [('홍길동', 50), ('김영희', 87), ('이철수', 90)]
# 정렬 기준을 lambda 함수로..
print(sorted(array, key=lambda x : x[0])) # 이름순 정렬
print(sorted(array, key=lambda x : x[1])) # 점수순 정렬
# [('김영희', 87), ('이철수', 90), ('홍길동', 50)]
# [('홍길동', 50), ('김영희', 87), ('이철수', 90)]
# 여러 리스트에서 lambda 표현식
list1 = [1, 2, 3, 4, 5]
list2 = [6, 7, 8, 9, 10]
result = map(lambda a, b: a + b, list1, list2)
print(list(result)) # [7, 9, 11, 13, 15]
반응형
'🌈 프로그래밍 > Python' 카테고리의 다른 글
[ python + github Action ] PR 리스트 자동화 하기 (with. pygithub) (0) | 2022.11.09 |
---|---|
[ python ] celery 모듈에 대해서 알아보자. (0) | 2022.09.22 |