가능한 모든 두개의 묶음 쌍 구하는 방법 있을까요?
조회수 653회
간단한 예제를 하나 들겠습니다.
A={1,2,3,4}
이 있을 때 가능한 모든 두 묶음을 구하는 코드를 만들고 싶습니다.
위의 숫자에 대한 답은
(1,2)(3,4) : {1,2,3,4} 과 (1,3)(2,4) : {1,3,2,4}
B=[1,2,3,4,5,6]
으로 확장하면
(1,2)(3,4)(5,6)
(1,2)(3,5)(4,6)
(1,3)(2,4)(5,6)
(1,3)(2,5)(4,6)
(1,4)(2,3)(5,6)
(1,4)(2,6)(3,5)
(1,5)(2,3)(4,6)
(1,5)(2,4)(3,6)
(1,6)(2,3)(4,5)
(1,6)(2,4)(3,5)
이 되겠네요.
python이나 matlab으로 어떻게 구현가능할까요?
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
1 답변
-
>>> def get_pairs(s, depth=0): # print('>'*depth, s) # depth+=1 if len(s) == 2: #print(s) yield (tuple(s),) for i in range(1, len(s)): pair = (s[0], s[i]) s_pair = s[1:] s_pair.remove(s[i]) for pairs in get_pairs(s_pair): #print(pair, pairs) yield (pair, *pairs) >>> r = [ p for p in get_pairs(s) ] >>> from pprint import pprint >>> pprint(r) [((1, 2), (3, 4), (5, 6)), ((1, 2), (3, 5), (4, 6)), ((1, 2), (3, 6), (4, 5)), ((1, 3), (2, 4), (5, 6)), ((1, 3), (2, 5), (4, 6)), ((1, 3), (2, 6), (4, 5)), ((1, 4), (2, 3), (5, 6)), ((1, 4), (2, 5), (3, 6)), ((1, 4), (2, 6), (3, 5)), ((1, 5), (2, 3), (4, 6)), ((1, 5), (2, 4), (3, 6)), ((1, 5), (2, 6), (3, 4)), ((1, 6), (2, 3), (4, 5)), ((1, 6), (2, 4), (3, 5)), ((1, 6), (2, 5), (3, 4))] >>> pprint(list(get_pairs([1,2,3,4]))) [((1, 2), (3, 4)), ((1, 3), (2, 4)), ((1, 4), (2, 3))]
댓글 입력