본문 바로가기
Language/Python

부분 집합의 출연 횟수 구하기

by Wikinist 2023. 7. 29.

부분집합의 출현 횟수를 구하기 위해서는 파이썬에서 Counter 클래스를 사용하면 편리합니다. Counter 클래스는 컨테이너에 포함된 요소들의 개수를 셀 때 유용하게 사용됩니다. 이를 활용하여 과일 조합의 부분집합을 생성하고, 각 부분집합의 출현 횟수를 계산할 수 있습니다.

아래는 과일 조합 리스트에서 부분집합의 출현 횟수를 구하는 예시 코드입니다.

from itertools import chain, combinations
from collections import Counter

# 예시 과일 조합 리스트
fruit_combinations = [
    ["apple", "banana"],
    ["apple", "orange"],
    ["banana", "orange"],
    ["apple", "banana", "orange"],
    ["grape", "apple"],
    ["grape", "banana"],
    ["grape", "orange"],
]

# 모든 부분집합을 생성하는 함수
def get_all_subsets(s):
    return chain.from_iterable(combinations(s, r) for r in range(len(s) + 1))

# 부분집합의 출현 횟수를 계산하는 함수
def count_subsets_appearance(subsets, all_combinations):
    counts = Counter()
    for subset in subsets:
        for combination in all_combinations:
            if all(elem in combination for elem in subset):
                counts[subset] += 1
    return counts

# 모든 과일들을 중복 없이 구하기
all_fruits = set(chain(*fruit_combinations))

# 모든 부분집합을 생성
all_subsets = list(get_all_subsets(all_fruits))

# 부분집합의 출현 횟수 계산
subset_appearances = count_subsets_appearance(all_subsets, fruit_combinations)

# 출현 횟수가 가장 많은 부분집합들 찾기
max_appearances = max(subset_appearances.values())
most_common_subsets = [subset for subset, count in subset_appearances.items() if count == max_appearances]

print("출현 횟수가 가장 많은 부분집합들:")
for subset in most_common_subsets:
    print(subset)

위 코드에서 fruit_combinations 리스트에는 과일 조합들이 포함되어 있습니다. get_all_subsets() 함수를 사용하여 모든 과일들의 부분집합을 생성하고, count_subsets_appearance() 함수를 사용하여 각 부분집합의 출현 횟수를 계산합니다. 마지막으로, 가장 출현 횟수가 많은 부분집합들을 출력합니다.

실행 결과는 다음과 같을 수 있습니다:

출현 횟수가 가장 많은 부분집합들:
('apple',)
('banana',)
('orange',)

해당 게시글은 ChatGPT의 도움을 받아 작성되었습니다.

'Language > Python' 카테고리의 다른 글

strftime(), strptime()  (0) 2023.07.31
파이썬 동등비교 __eq__()  (0) 2023.07.31
로그 필터 설정  (0) 2023.07.23
루트로거, 차일드로거  (0) 2023.07.23
파이썬 로깅 포맷 문자열  (0) 2023.07.23