[Python] 파이썬 Set / 집합 자료형 / 집합연산 / 집합계산 알아보기!
[Python] 파이썬 Set / 집합 자료형 / 집합연산 / 집합계산 알아보기!
집합
집합이라 하면,
고등학교 1학년 딱 들어가면 수학책 첫 단원 이름!
이였던 것같다. (나는 그 세대다..) 수학 A,B형세대ㅋㅋㅋ
아무튼 그 기억을 떠올려서 간단한 이론을 배워보자.
1. 교집합
2. 합집합
3. 차집합
왼쪽 그림 : 집합 A에 대한 집합 B의 차집합이다. 즉 A-B
오른쪽 그림 : 집합 B에 대한 집합 A의 차집합이다. 즉 B-A
4. XOR
XOR은 bitwise exclusive or 이라는 뜻으로,
A-B + B-A를 합친 것이다.
집합의 특징 2가지.
1. 중복을 허용하지 않는다. -> 리스트의 중복 제거를 위한 필터 역할
2. 순서가 없다. -> 순서가 없기 때문에 인덱싱 불가
위 특성에 따라 다음 코드의 값은 모두 같다.
>>> set1 = {1,2,3,4}
{1, 2, 3, 4}
>>> set2 = set([1,2,3,4])
{1, 2, 3, 4}
>>> set3 = {3,1,2,4}
{1, 2, 3, 4}
>>> set4 = {1,1,2,3,4}
{1, 2, 3, 4}
파이썬에서 집합 만들기 - set()
이미 위 코드에 적혀있지만
집합은 {} 중괄호 안에 원소를 넣거나, 또는 set()에 문자열이나, 리스트를 넣어서 만들 수 있다.
>>> set1 = {1,2,3,4}
{1, 2, 3, 4}
>>> set2 = set("hello")
{'e', 'h', 'l', 'o'}
>>> set3 = set([1,2,3,4])
{1, 2, 3, 4}
집합 원소 추가 및 삭제 - add /update/remove/discard
>>> set1 = {1,2,3,4}
>>> set1.add(5)
{1, 2, 3, 4, 5}
>>> set1.update([6,5,9])
{1, 2, 3, 4, 5, 6, 9}
>>> set1.remove(5)
{1, 2, 3, 4, 6, 9}
>>> set1.discard(10)
{1, 2, 3, 4, 6, 9}
집합 set1을 만들었다.
add() - 특정 값 추가하는 함수
update() - 어러 개 값을 추가하는 함수. 리스트로 넣어주어야 한다.
remove() - 특정 값 삭제하는 함수(집합 안에 해당 원소가 없을 시 오류)
discard() - 특정 값 삭제하는 함수(집합 안에 값이 해당 원소가 없어도 출력)
여기서 주의해야 할 점은!
함수를 적용하면 set1의 원본값이 계속 바뀐다.
따라서, 따로 변수를 할당할 필요는 없지만,
계산에 혼동이 생길 수 있기 때문에 주의가 필요하다.!
집합 다루기
>>> new_set = {1,2,3,4}
>>> print(5 in new_set)
False
>>> print(4 in new_set)
True
in을 사용하여
집합 안에 있는 원소들을 검색할 수 있다.
결과는 False와 Ture로 반환된다.
>>> new_set = {1,2,3,2,4,4,4}
>>> print(len(new_set))
4
리스트나, 튜플, 딕셔너리와 마찬가지로
len()으로 원소의 개수도 셀 수 있다.
중복은 허용되지 않기 때문에 4가 출력되었다.
집합연산
>>> set1 = {1,2,3,4}
>>> set2 = {2,3,5,7}
>>> union = set1 | set2
{1, 2, 3, 4, 5, 7}
>>> intersection = set1 & set2
{2, 3}
>>> diff = set1 - set2
{1, 4}
>>> xor = set1 ^ set2
{1, 4, 5, 7}
아래와 같은 기호를 사용하면 된다.
1. 합집합 : | -> 윈도우의 경우 쉬프트 누르고 \, 맥은 쉬프트 역슬레쉬
2. 교집합 : &
3. 차집합 : - -> A-B인지, B-A인지에 따라 값이 다르게 나옴
4. XOR : ^
