Study/Python

[Python] 집합

ChoiSenn 2022. 4. 5. 21:15

 

 

 

 

집합

 

 - 파이썬에서의 집합 또한 수학의 집합과 유사하며, 튜플과 달리 순서가 없는 자료형이다.

 - 동일한 값을 가지는 항목의 중복이 허용되지 않는다.

 - 교집합, 합집합, 차집합, 대칭차집합 등의 다양한 집합 연산을 수행할 수 있다.

        numbers = {2, 1, 3}  # 숫자 3개로 이루어진 집합 자료형

 

 - 리스트로부터 집합을 생성하는 것도 가능하다.

 - 집합자료형에서는 요소가 중복되면 자동으로 중복된 요소를 제거한다.

        set([1, 2, 3, 1, 2])  # 리스트로 집합 생성

        >>  {1, 2, 3}

 - 문자열로부터 집합을 생성하는 것도 가능한데, 이때에는 각 문자들이 하나의 요소가 된다.

        set("abcdefa")

        >> {'f', 'a', 'b', 'e', 'c', 'd'}

 - 비어있는 집합을 생성하려면 set()함수를 이용한다.

        numbers = set()

 

 

 

집합의 항목에 접근

 

 - 어떤 항목이 집합 안에 있는지를 검사하려면 리스트와 마찬가지로 in 연산자를 이용한다.

        numbers = {2, 1, 3}

        if 1 in numbers:  # 1이라는 항목이 numbers 집합에 있는지 검사

                print("집합에 1이 있다.")

 - 집합의 항목은 순서가 없기 때문에 인덱스로 접근할 수는 없다.

 - 그러나 for 반복문을 이용하여 각 항목들에 접근할 수는 있다.

        for x in numbers:

                print(x, end=" ")

        >> 3 1 2

 - 항목들이 출력되는 순서는 입력된 순서와 다를 수 있다.

 - 정렬되어 출력시키기를 원한다면 sorted() 함수를 이용하면 된다.

        for x in sorted(numbers):

                print(x, end=" ")

        >> 1 2 3

 

- 집합의 요소에는 인덱스가 없기 때문에 인덱싱, 슬라이싱 연산은 의미가 없다.

 

 - add() 메소드를 이용하여 하나의 요소를 추가할 수 있다.

        numbers.add(4)

        >> {1, 2, 3, 4}

 - 집합의 요소를 삭제할 때에는 remove() 메소드를 사용할 수 있다.

        numbers.remove(4)

        >> {1, 2, 3}

 

 - ==과 =! 연산자를 이용하여 2개의 집합이 서로 같은지 검사할 수 있다.

        a = {1, 2, 3}

        b = {1, 2, 3}

        a == b

        >> True

 - <와 <=연산자를 이용하여 집합이 진부분집합인지, 부분집합인지 검사할 수 있다.

        a = {1, 2, 3, 4, 5}

        b = {1, 2, 3}

        b < a

        >> True

 

 - len() : 항목의 개수 반환

 - max() : 가장 큰 항목 반환

 - min() : 가장 작은 항목 반환

 - sorted() : 항목들 정렬하여 리스트 만들기

 - sum() : 항목들의 합 구하기

 

 - 다수의 항목을 가진 데이터에 대해 적용할 수 있는 논리 연산으로 all()과 any()함수가 있다.

 - 이 함수들은 인자로 주어진 데이터의 항목들 각각에 대해 bool형 평가를 한 결과를 종합적으로 반환한다.

        a = {1, 0, 2, 3, 3}

        all(a)  # a가 모두 True였는지 검사

        >> False

        any(a)  # a에 하나라도 True인지(0이 아닌 것이 있는지) 검사

        >> True

 

 

 

집합 연산

 

 - 집합이 유용한 이유는 교집합이나 합집합 같은 집합 연산을 지원하기 때문이다.

 

 - 합집합은 두개의 집합을 합하는 연산으로, | 연산자나 union()메소드를 사용한다.

        a = {1, 2, 3}

        b = {3, 4, 5}

        a | b

        >>  {1, 2, 3, 4, 5}

        a.union(b)

        >>  {1, 2, 3, 4, 5}

 

 - 교집합은 겹치는 요소를 구하는 연산으로, & 연산자나 intersection() 메소드를 사용한다.

        a & b

        >>  {3}

        a.intersection(b)

        >>  {3}

 

 - 차집합은 하나의 집합에서 다른 집합의 요소를 빼는 것이며, - 연산자나 difference() 메소드를 사용한다.

        a - b

        >>  {1, 2}

        a.difference(b)

        >>  {1, 2}

 

 - 대칭차집합은 두 집합의 합집합에서 교집합을 뺀 요소를 구하는 것이며, ^ 연산자나 symmetric_difference() 메소드를 사용한다.

        a ^ b

        >>  {1, 2, 4, 5}

        a.symmetric_difference(b)

        >>  {1, 2, 4, 5}