pbj0812의 코딩 일기

[수학] python을 이용한 집합 연산하기 본문

Science/수학

[수학] python을 이용한 집합 연산하기

pbj0812 2020. 9. 22. 00:01

0. 목표

 - python을 이용한 집합 연산하기

1. 실습

 1) 데이터 생성

  - 중복 제거도 적용하기 위해 값을 중복하게 입력

a = [1, 1, 2, 3, 4, 5, 5]
b = [4, 4, 5, 6, 7, 8, 8]

 2) 중복제거 함수

  (1) 빈 리스트를 만들고 인풋 값이 해당 리스트에 존재하면 pass 존재하지 않으면 추가

def overlap(inp):
    result = []
    for i in inp:
        if i in result:
            pass
        else:
            result.append(i)
    return result

  (2) 테스트

   - 결과 : [1, 2, 3, 4, 5]

print(overlap(a))

 3) 합집합 함수

  (1) 두 리스트를 받아 더하고, 중복을 제거

def union(list1, list2):
    tmp = list1 + list2
    result = overlap(tmp)
    return result

  (2) 테스트

   - 결과 : [1, 2, 3, 4, 5, 6, 7, 8]

print(union(a, b))

 4) 교집합 함수

  (1) 원소의 수가 작은 쪽을 기준으로 삼기 위해 길이로 비교 이후 중복제거 함수 반대로 적용

def intersection(list1, list2):
    result = []
    # 연산 효율 증대
    if len(list1) >= len(list2):
        tmp = list1
        tmp2 = list2
    else:
        tmp = list2
        tmp2 = list1
    for i in tmp:
        if i in tmp2:
            result.append(i)
        else:
            pass
    # 중복제거
    result2 = overlap(result)
    return result2

  (2) 테스트

   - 결과 : [4, 5]

print(intersection(a, b))

 5) 차집합 함수

  (1) 왼쪽 리스트의 원소가 오른쪽에 없을 경우 빈 리스트에 추가

def difference(list1, list2):
    result = []
    for i in list1:
        if i in list2:
            pass
        else:
            result.append(i)
    # 중복제거
    result2 = overlap(result)
    return result2

  (2) 테스트

   - 결과 : [1, 2, 3]

print(difference(a, b))

2. set을 이용한 계산

 1) 데이터 생성

a2 = {1, 1, 2, 3, 4, 5, 5}
b2 = {4, 4, 5, 6, 7, 8, 8}

 2) 합집합

  - 결과 : {1, 2, 3, 4, 5, 6, 7, 8}

print(a2.union(b2))

 3) 교집합

  - 결과 : {4, 5}

print(a2.intersection(b2))

 4) 차집합

  - 결과 : {1, 2, 3}

print(a2.difference(b2))

3. 참고

 - 집합 자료형 

Comments