곱집합을 해주려면
예를 들어 'ABCD' 'xy' 두 문자열을 Ax Ay Bx By Cx Cy 이렇게 묶어주려면
for문을 2개는 돌려야 할거다
그런데 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')]
이렇게 출력!
list 이어 붙이기
my_list = [[1, 2], [3, 4], [5, 6]]
# 방법 1 - sum 함수
answer = sum(my_list, [])
# 방법 2 - itertools.chain 하나의 iterator만 전달해도 모든 요소들을 조회하면서 넘겨준다.
import itertools
list(itertools.chain.from_iterable(my_list))
# 방법 3 - itertools와 unpacking 2차원 리스트를 한 번 unpacking해서 넘겨준다.
import itertools
list(itertools.chain(*my_list))
# 방법 4 - list comprehension 이용
[element for array in my_list for element in array]
# 방법 5 - reduce 함수 이용 1 reduce(function, iterable[, initializer]) 형식
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()
다차원 배열을 1차원 배열로 평평하게(flatten)해준다.
'Etc. > Python' 카테고리의 다른 글
[Python] itertools-2 (0) | 2021.10.10 |
---|---|
[Python] list 나름 정리 (0) | 2021.10.10 |
[Python] join (0) | 2021.10.10 |
[Python] zip (0) | 2021.10.10 |
[Python] 리스트 내포(List comprehension) (0) | 2021.10.10 |
댓글