itertools
반복자(iterator) 관련 다양한 함수 제공
count()
지정된 값에서 시작한 시퀀스를 생성하는 함수
import itertools
counter = itertools.count(start=5, step=2)
for i in counter:
if i > 10:
break
print(i, end=" ") # 5 7 9
cycle()
지정된 시퀀스를 무한히 반복하는 함수
import itertools
colors = ['red', 'green', 'blue']
color_cycle = itertools.cycle(colors)
for _ in range(6):
print(next(color_cycle), end=" ")
repeat()
지정된 값을 지정된 횟수만큼 반복하는 함수
import itertools
repeater = itertools.repeat("Hello", 3)
for elem in repeater:
print(elem, end=" ") # Hello Hello Hello
chain()
두 개 이상의 시퀀스를 연결하는 함수
import itertools
list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined = itertools.chain(list1, list2, [7, 8])
for i in combined:
print(i, end=" ") # 1 2 3 4 5 6 7 8
permutations()
지정된 시퀀스의 모든 가능한 순열을 생성하는 함수
combinations()
지정된 시퀀스의 모든 가능한 조합(중복 없음)을 생성하는 함수
import itertools
perms = itertools.permutations([1, 2, 3], 2)
for perm in perms:
print(perm, end=" ") # (1, 2) (1, 3) (2, 1) (2, 3) (3, 1) (3, 2)
combs = itertools.combinations([1, 2, 3, 4], 3)
for comb in combs:
print(comb, end=" ") # (1, 2, 3) (1, 2, 4) (1, 3, 4) (2, 3, 4)
순열 공식 : nPr = n!/(n-r)!
https://docs.python.org/ko/3.8/library/itertools.html
collections
컨테이너 클래스
Counter
해시 가능한 객체의 개수를 세는 데 사용되는 특별한 딕셔너리
from collections import Counter
# Counter 객체 생성 및 요소 개수 세기
fruit_count = Counter(['apple', 'apple', 'banana', 'apple', 'banana', 'orange'])
print(fruit_count) # Counter({'apple': 3, 'banana': 2, 'orange': 1})
# 요소 개수 확인
print(fruit_count['apple']) # 3
print(fruit_count['banana']) # 2
# 가장 흔한 요소와 개수 확인
print(fruit_count.most_common(1)) # [('apple', 3)]
Counter
해시 가능한 객체의 개수를 세는 데 사용되는 특별한 딕셔너리
from collections import defaultdict
# defaultdict 객체 생성 및 기본값 설정
fruit_dict = defaultdict(int)
fruit_dict['apple'] += 1
fruit_dict['banana'] += 2
print(fruit_dict) # defaultdict(<class 'int'>, {'apple': 1, 'banana': 2})
# 기본값을 활용하여 요소 접근
print(fruit_dict['orange']) # 0 (기본값인 int의 초기값)
deque
deque 클래스는 양방향 큐(Double-ended Queue)
from collections import deque
# deque 객체 생성
d = deque()
# 요소 추가
d.append('apple')
d.append('banana')
d.append('orange')
# 요소 제거
d.popleft()
# deque 순회
for elem in d:
print(elem) # : banana orange
# 요소 제거
d.pop()
# deque 순회
for elem in d:
print(elem) # : banana
https://docs.python.org/ko/3/library/collections.html
가변인자
*args
위치 인자를 임의의 개수로 받을 수 있는 매개변수
함수를 호출할 때 넣은 위치 인자들은 튜플로 묶여서 함수 내부로 전달
def add(*args):
result = 0
for num in args:
result += num
return result
# 함수 호출 예시
print(add(1, 2, 3)) # 6
함수 정의시 인자 개수의 제한 없이 다양한 인자를 처리 가능
def show_info(*args, **kwargs):
print("Positional arguments:")
for arg in args:
print(arg)
print("\nKeyword arguments:")
for key, value in kwargs.items():
print(key + ": " + value)
show_info("Alice", age="30")
# Positional arguments:
# Alice
# Keyword arguments:
# age="30"
람다함수
정렬
students = [
{'name': 'Alice', 'age': 25},
{'name': 'Bob', 'age': 20},
{'name': 'Charlie', 'age': 30},
]
# 나이를 기준으로 정렬
students.sort(key=lambda student: student['age'])
students.sort(key=lambda student: student['name'])
매핑
numbers = [1, 2, 3, 4, 5]
# 모든 요소에 대해 제곱 계산
squared_numbers = list(map(lambda x: x ** 2, numbers))
print(squared_numbers) # [1, 4, 9, 16, 25]
필터링
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 모든 요소에 대해 제곱 계산
even_numbers = list(filtering(lambda x: x % 2 == 0, numbers))
print(even_numbers) # [2, 4, 6, 8, 10]
'Python > 수업' 카테고리의 다른 글
객체지향(Object Oriented Programming) 특강 (1) | 2023.04.28 |
---|---|
파이썬 대패키지시대_패키지 의존성 관리 (6) | 2023.04.23 |
파이썬의 코루틴 (2) | 2023.04.23 |
프로세스와 스레드 (2) | 2023.04.16 |
타입별 메서드의 종류 (0) | 2023.04.16 |