집합은 중학수학에서 배운 내용이다. 코딩에서 사용하는 수학은 매우 실용적인 것들이 많다. 집합도 그 중에 하나이다.
집합은 이렇게 만든다.
A = set([1,2,3])
중학 수학을 잠시 생각해본다. 지금 집합을 중학교에서 가르치는지는 모르겠으나 그런 학교 교육과는 별개다. 수학의 정석에 나온 설명은 엄청나게 지루하고 재미없게 만들어 놨다. 마치 수학 포기할거면 일찍 포기해라는 식의 책이다. 뭐, 여기서 이야기할 건 아니지만 한국 교육의 문제점이다. 원래 수학은 제대로 쓰이면 재미있다.
파이썬의 집합은 간단하다. 사용법만 익히면 계산은 컴퓨터가 하니까 쉽다.
파이썬의 집합개념을 알기 위해서 숫자를 마구 넣어 봤다. 그런데 집합을 만들어 놓으니 알아서 정리를 해준다. 집합은 중복이 없는 요소를 가진다. 같은 숫자를 100개를 넣건 1000개를 넣건 파이썬이 정리해준다. 심지어 오름차순으로 정리해준다. (항상 정리해주지는 않는다)
집합 A와 B로 정리해보자
여기서 배울건, 교집합 합집합,차집합이다.
아래와 같이 쓰면 된다.
다음과 같이 함수형으로도 가능하다.
#교집합
A & B
A.intersection(B)
#합집합
A | B
A.union(B)
#차집합
B - A
B.difference(A)
문자열 집합은 특징적이다. 분명 문자열을 저장했는데 문자로 쪼개지고 중복이 사라진다. 순서도 없다.
그래서 집합 자료형은
1. 중복이 없다.
2. 순서도 없다. (초기에 자체 기준으로 정렬을 하긴 한다.)
순서가 없다는 말은 인덱싱이 없다는 말이다. 실제로 [0] 이렇게 붙이면 오류가 난다. 따라서 리스트로 변환해서 인덱싱을 쓴다.
인덱싱이 없는데 왜 집합을 사용하는가는 사용 목적에 달려있다. 일단 중복을 거를 수 있다. 여러 숫자가 들어있는 엑셀데이터를 가져와서 중복된 숫자를 다 제거할 수도 있고 교집합 합집합을 구해서 포함관계를 정의할 수도 있다. 수학시간에는 그것들을 직접 수작업으로 계산해야 했을테지만, 파이썬에게 일을 시키면 사람이 몇시간 걸릴일도 몇초안에 끝낼 수 있다. (프로그램을 잘 짰을때)
*집합을 조작하는 함수
기본적인 조자법이다. add 는 추가한다. update는 리스트를 넣을 수 있다. 동일한 숫자는 처리되지 않는 부분에 주목한다. 숫자의 삭제는 다른 iterable처럼 인덱싱이 안되니까 값자체를 입력한다. 삭제는 del 키워드로 한다.
집합 부분은 특정 수학 분야라서 중요도가 그렇게 까지 높지 않으니까 일반적인 앱을 만들기 위해 파이썬을 배운다면 빠르게 체크하고 넘어가는게 좋다.