파트6. Itertools / Collections 모듈

신예진·2023년 7월 17일
0

1) 곱집합 구하기 - product
예시) 두 스트링 'ABCD', 'xy' 의 곱집합은 Ax Ay Bx By Cx Cy Dx Dy

보통 사람들은 for문을 이용해 두 iterable 원소를 하나씩 곱하지만,
itertools.product를 이용하면, for 문을 사용하지 않고 곱집합을 구할 수 있다.

import itertools

iterable1 = 'ABCD'
iterable2 = 'xy'
iterable3 = '1234'
print(list(itertools.product(iterable1, iterable2, iterable3)))

2) 2차원 리스트를 1차원 리스트로 만들기 - from_iterable

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))

3) 순열과 조합
combinations와 permutations를 이용하면 쉽게 풀 수 있음!

from itertools import *

def solution(mylist):
    answer = sorted(list(permutations(mylist)))
    return answer
<참고>
import itertools

pool = ['A', 'B', 'C']
print(list(map(''.join, itertools.permutations(pool)))) # 3개의 원소로 순열 만들기
print(list(map(''.join, itertools.permutations(pool, 2)))) # 2개의 원소로 순열 만들기

4) 가장 많이 등장하는 알파벳 찾기 - collections의 Counter (참고 : hjseo-dev.log)

answer = collections.Counter(mylist)
values = [i for i in answer.values()]
items = [i for i in answer.items()]

0개의 댓글