-
itertoolsPrograming/Python 2019. 6. 6. 12:21
안녕하세요.
itertools 는 확률에서 많이 사용되는 조합, 집합 등의 연산을 수행할 수 있도록 제공되는 모듈인데요.
고등학교 또는 대학교때 머리 싸매고 외웠던 순열/조합에 대한 연산을 단 한줄로 손쉽게 구할 수 있습니다.
수학적 모델링을 구현하고 계산할때 이 모듈을 많이 사용할 것 같은 느낌(?)이 드네요..ㅠ.ㅠ
학창시절 수학을 좋아하긴 했지만 시간이 지나서 다시 공부를 해야 하는 상황에는 조금 걱정이 앞서네요.
1) itertools import 하기
1234from itertools import combinationsfrom itertools import combinations_with_replacementfrom itertools import permutationsfrom itertools import product2) product
중복 순열로 중복을 허용하며 일렬로 세울수 있는 모든 경우에 대한 조합입니다.
12345from itertools import productprint (list(product('ABCD', repeat=2)))---[('A', 'A'), ('A', 'B'), ('A', 'C'), ('A', 'D'), ('B', 'A'), ('B', 'B'), ('B', 'C'), ('B', 'D'), ('C', 'A'), ('C', 'B'), ('C', 'C'), ('C', 'D'), ('D', 'A'), ('D', 'B'), ('D', 'C'), ('D', 'D')]http://colorscripter.com/info#e" target="_blank" style="text-decoration:none; color:white">cs 3) permutations
한국말로는 순열이라고 불리는데 정의에 따르면 정의역과 공역이 일대일 대응이 되는 집합이라고 합니다.
복잡해보이는데 쉽게 말하면 모든 엘리먼트가 각 자리에 한번씩은 들어갈 수 있다는 의미입니다.(순서 상관 있음)
12345from itertools import permutationsprint list(permutations('abc',3))---[('a', 'b', 'c'), ('a', 'c', 'b'), ('b', 'a', 'c'), ('b', 'c', 'a'), ('c', 'a', 'b'), ('c', 'b', 'a')]4) combinations 또는 combinations_with_replacement
조합 또는 중복 조합을 의미하는데 집합에서 일부 또는 전부의 원소를 가지고 부분집합을 만드는 것입니다. 이때 원소의 위치는 상관이 없게 됩니다.
즉 (1,2) 와 (2, 1) 은 동일한 것으로 간주하며 중복 조합의 경우 원소가 한번 이상 부분집합에 포함이 될 수 있는 경우입니다.
12345678from itertools import combinationsfrom itertools import combinations_with_replacementprint(list(combinations_with_replacement('12345', 2)))print(list(combinations('12345', 2)))---[('1', '1'), ('1', '2'), ('1', '3'), ('1', '4'), ('1', '5'), ('2', '2'), ('2', '3'), ('2', '4'), ('2', '5'), ('3', '3'), ('3', '4'), ('3', '5'), ('4', '4'), ('4', '5'), ('5', '5')][('1', '2'), ('1', '3'), ('1', '4'), ('1', '5'), ('2', '3'), ('2', '4'), ('2', '5'), ('3', '4'), ('3', '5'), ('4', '5')]http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter5) 응용
join 과 sorted를 이용하면 문자열에 대한 부분집합도 쉽게 출력할 수 있습니다.
12345678910111213141516171819202122232425262728from itertools import combinations_with_replacementprint (*["".join(ch) for ch in combinations('12345', 2)], sep='\n')---12131415232425343545print (*["".join(ch) for ch in combinations(sorted('ZKAND'), 2)], sep='\n')---ADAKANAZDKDNDZKNKZNZhttp://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter6) 위키페이지
https://docs.python.org/2/library/itertools.html#itertools.groupby
'Programing > Python' 카테고리의 다른 글
hex2string (0) 2020.06.02 set을 이용한 교집합, 차집합, 합집합 (0) 2019.06.07 print each element in a list (0) 2019.06.06 [python] string center (0) 2019.05.09 [python] tuples (0) 2019.04.26