728x90
https://programmers.co.kr/learn/courses/4008
itertools
[곱집합 구하기]
- 두 스트링 'ABCD', 'xy' 의 곱집합은 Ax Ay Bx By Cx Cy Dx Dy
iterable1 = 'ABCD'
iterable2 = 'xy'
iterable3 = '1234'
for value1 in iterable1:
for value2 in iterable2:
for value3 in iterable3:
print(value1, value2, value3)
# itertools.product 사용
import itertools
iterable1 = 'ABCD'
iterable2 = 'xy'
iterable3 = '1234'
print(list(itertools.product(iterable1, iterable2, iterable3)))
# [('A', 'x', '1'), ('A', 'x', '2'), ('A', 'x', '3'), ('A', 'x', '4'), ('A', 'y', '1'), ('A', 'y', '2'), ('A', 'y', '3'), ('A', 'y', '4'), ('B', 'x', '1'), ('B', 'x', '2'), ('B', 'x', '3'), ('B', 'x', '4'), ('B', 'y', '1'), ('B', 'y', '2'), ('B', 'y', '3'), ('B', 'y', '4'), ('C', 'x', '1'), ('C', 'x', '2'), ('C', 'x', '3'), ('C', 'x', '4'), ('C', 'y', '1'), ('C', 'y', '2'), ('C', 'y', '3'), ('C', 'y', '4'), ('D', 'x', '1'), ('D', 'x', '2'), ('D', 'x', '3'), ('D', 'x', '4'), ('D', 'y', '1'), ('D', 'y', '2'), ('D', 'y', '3'), ('D', 'y', '4')]
[2차원 리스트를 1차원으로 변환]
my_list = [[1, 2], [3, 4], [5, 6]]
answer = []
for element in my_list:
answer += element
my_list = [[1, 2], [3, 4], [5, 6]]
# 방법 1 - sum 함수
answer = sum(my_list, [])
# 방법 2 - itertools.chain
import itertools
list(itertools.chain.from_iterable(my_list))
# 방법 3 - itertools와 unpacking
import itertools
list(itertools.chain(*my_list))
# 방법 4 - list comprehension 이용
[element for array in my_list for element in array]
# 방법 5 - reduce 함수 이용 1
from functools import reduce
list(reduce(lambda x, y: x+y, my_list))
# 방법 6 - reduce 함수 이용 2
from functools import reduce
import operator
list(reduce(operator.add, my_list))
# 방법 7 - numpy 라이브러리의 flatten 이용 : 각 원소의 길이가 동일한 경우에만 사용 가능
import numpy as np
np.array(my_list).flatten().tolist()
- sum(iterable, start=0)
- iterable + start를 반환
- start는 default값이 0이기 때문에 비어있는 리스트나 튜플이 들어올 경우 0을 반환
- iterable이 비어있을 때 특정 값을 반환하게 하고 싶다면 해당 값을 두 번째 인자로 넣어주면 됨
- itertools.chain(*iterables)
- 첫 번째 iterable에서 소진될 때까지 요소를 반환 후, 다음 iterable로 넘어가는 식으로 모든 iterable이 소진될 때까지 진행하는 iterator 생성
- 여러 시퀀스를 단일 시퀀스처럼 처리하는 데 사용
- functools.reduce(function, iterable[, initializer])
- function의 두 인자를 iterable의 요소에 왼쪽부터 오른쪽 순으로 적용
- reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])의 경우, 왼쪽 인자 x는 누적값/오른쪽 인자 y는 iterable에서 온 갱신 값
- initializer가 있으면 계산에서 iterable 항목 앞에 배치됨 (iterable이 비어있을 때 기본 값의 역할)
[순열과 조합]
import itertools
pool = ['A', 'B', 'C']
print(list(map(''.join, itertools.permutations(pool)))) # 3개의 원소로 수열 만들기
print(list(map(''.join, itertools.permutations(pool, 2)))) # 2개의 원소로 수열 만들기
print(list(map(''.join, itertools.combinations(pool)))) # 3개의 원소로 조합 만들기
print(list(map(''.join, itertools.combinations(pool, 2)))) # 2개의 원소로 조합 만들기
728x90
'PROGRAMMING > PYTHON' 카테고리의 다른 글
[Python] 문자열의 숫자 판단 - isdecimal(), isdigit(), isnumeric() (0) | 2022.01.15 |
---|---|
[Python] 파이썬을 파이썬답게 - 반복문, 이진 탐색, 가장 큰 수 (0) | 2022.01.15 |
[Python] 파이썬을 파이썬답게 - iterable/sequence type 다루기 (0) | 2022.01.15 |
[Python] 파이썬을 파이썬답게 - 정수/문자열 다루기 (0) | 2022.01.15 |
[Python] heapq 모듈 사용법 (0) | 2022.01.11 |
댓글