Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 집합(Set)으로 세 개의 리스트에서 공통 요소 찾기

사용자로부터 입력받은 세 개의 리스트가 주어졌을 때, 세 리스트 모두에 공통으로 존재하는 요소를 찾아내는 것이 이 프로그램의 목표입니다. 파이썬에서는 리스트를 집합(set)으로 변환한 뒤 교집합(intersection) 메서드를 활용하면 가장 간단하고 효율적으로 문제를 해결할 수 있습니다.

집합은 중복된 값을 허용하지 않는 자료구조이며, 교집합 연산이 해시 기반으로 구현되어 있어 리스트의 요소를 하나씩 일일이 비교하는 방식보다 훨씬 빠르게 동작합니다. 따라서 데이터가 많아질수록 집합을 활용한 접근이 유리합니다.

예제

입력
A = [2, 3, 4, 5, 6]
B = [2, 3, 7, 6, 90]
C = [2, 3, 45, 34]

출력
공통 요소 = [2, 3]

알고리즘

  1. 세 개의 리스트 요소를 입력받습니다.
  2. 각 리스트를 set() 함수로 집합으로 변환합니다.
  3. 첫 번째 집합과 두 번째 집합에 intersection() 메서드를 적용하여 공통 요소를 구합니다.
  4. 그 결과를 세 번째 집합과 다시 교집합 연산하여 최종 공통 요소를 구한 뒤 출력합니다.

예제 코드

def common_ele(list_a, list_b, list_c):
    # 각 리스트를 집합으로 변환
    s1 = set(list_a)
    s2 = set(list_b)
    s3 = set(list_c)

    # 교집합 메서드로 공통 요소 찾기
    result = s1.intersection(s2).intersection(s3)

    # 집합을 리스트로 변환하여 출력
    print('공통 요소:', list(result))


if __name__ == '__main__':
    lists = []

    # 세 개의 리스트 입력받기
    for i in range(3):
        n = int(input(f'{i + 1}번째 리스트의 크기: '))
        print('요소를 입력하세요:')
        temp = []
        for _ in range(n):
            num = int(input())
            temp.append(num)
        lists.append(temp)

    # 함수 호출
    common_ele(lists[0], lists[1], lists[2])

실행 결과

1번째 리스트의 크기: 5
요소를 입력하세요:
2
3
4
5
6
2번째 리스트의 크기: 5
요소를 입력하세요:
2
3
7
6
90
3번째 리스트의 크기: 4
요소를 입력하세요:
2
3
45
34
공통 요소: [2, 3]

코드 설명

common_ele() 함수는 세 개의 리스트를 인자로 받아 각각 집합으로 변환합니다. 이후 intersection() 메서드를 연달아 호출하여 세 집합 모두에 포함된 요소만 남기고, 마지막에는 결과 집합을 다시 리스트로 변환해 출력합니다.

교집합은 & 연산자를 사용해서도 동일하게 구할 수 있습니다.

result = s1 & s2 & s3

참고로 집합은 요소의 순서를 보장하지 않으므로, 출력되는 값의 순서는 실행 환경에 따라 달라질 수 있습니다. 순서가 중요하다면 sorted(result)처럼 정렬한 뒤 출력하면 됩니다.