Python/수업

itertools, collections

끈끈 2023. 5. 29. 22:53

 

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

 

itertools — 효율적인 루핑을 위한 이터레이터를 만드는 함수 — Python 3.8.16 문서

itertools — 효율적인 루핑을 위한 이터레이터를 만드는 함수 이 모듈은 APL, Haskell 및 SML의 구성물들에서 영감을 얻은 여러 이터레이터 빌딩 블록을 구현합니다. 각각을 파이썬에 적합한 형태로

docs.python.org

 


 

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

 

collections — Container datatypes

Source code: Lib/collections/__init__.py This module implements specialized container datatypes providing alternatives to Python’s general purpose built-in containers, dict, list, set, and tuple.,,...

docs.python.org

 


 

가변인자

 

*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]

 

https://wikidocs.net/22803

 

2) map, filter

앞서 배운 제너레이터(`generator`)는 이터레이터(`iterator`) 입니다. 다만 제너레이터 표현식 또는 `yield`키워드를 통해 생성한 이터레이터는 구분을 위해서…

wikidocs.net

 

'Python > 수업' 카테고리의 다른 글

객체지향(Object Oriented Programming) 특강  (1) 2023.04.28
파이썬 대패키지시대_패키지 의존성 관리  (6) 2023.04.23
파이썬의 코루틴  (2) 2023.04.23
프로세스와 스레드  (2) 2023.04.16
타입별 메서드의 종류  (0) 2023.04.16