장래 프로그래머의 블로그

2024.10.03 TIL 본문

Today I Learned

2024.10.03 TIL

wriml92 2024. 10. 3. 21:29

내일 셋에 관해 스터디 발표를 하는데 PPT가 뭔가 부족한 것 같아서

PPT를 만든 팀원께 죄송하지만 내가 PPT를 새로 만들어봤다.

그래서 셋에 관해 조사한 내용을 복습할 겸 정리해본다.

 

Set이란 무엇인가?

먼저 셋이란 파이썬의 컬렉션 자료형 중 하나로 중괄호 {}를 사용하여 선언한다.
그리고 다른 컬렉션 자료형 중 돋보이는 특징이라면 중복이 없는 요소들로만 이루어진 집합 컬렉션이다.
그래서 중복된 값을 초기에 만들거나 후기에 add 메서드 등으로 추가해도 값이 저장이 되지 않는다.
그러한 이유로 중복 데이터를 제거하거나 데이터 간의 비교를 위해 주로 쓰인다.

셋의 특징

특징 첫 번째는 앞서 설명했듯 중복되는 요소를 허용하지 않는 것이다.


위는 예시코드로 2를 두 번 넣어 중복된 요소로 입력을 했지만 출력 값을 보면 2가 한번으로 중복된
요소가 삭제된 것을 볼 수 있다.


두 번째는 비순차 자료형 즉 순서가 없는 자료형이다.
리스트나 튜플처럼 순서가 있는 컬렉션 타입이 아니기 때문에, 셋의 요소는 순서가 없어
인덱스를 통한 값의 접근이나 수정 및 슬라이싱이 불가하다.

그래서 위 코드에서 Set의 0번째로 인덱스 접근을 하려고 하려면 오류가 뜬다.


세 번째, 셋은 가변적 자료형이다. 셋은 생성 후에도 요소를 추가하거나 삭제할 수 있다.
단, 셋의 요소는 변하지 않는 자료형이어야 한다는 것이다.


그리고 네 번째는 수학적 집합 연산을 지원한다는 것이다. 수학의 합집합과 교집합 등
다양한 집합연산이 가능하다는 것이다.

Set 생성 및 요소 관리

먼저 Set의 생성으로


Set을 생성하려면 위 코드처럼 셋 이름과 셋에 들어갈 요소를 중괄호 {1, 2, 3, 4, 5} 이렇게 작성하면
프린트 함수로 확인할 때 값으로 {1,2,3,4,5} 이렇게 출력된다.


두번째로 Set 요소 추가


셋 옆에 add 메서드를 작성하고 괄호 안에 추가하고 싶은 숫자인 6을 작성하면
결과 값으로 위처럼 기존 셋의 요소들에 6이 추가되어서 출력된다.


세번째로 Set 요소 제거


셋 옆에 remove 메서드를 작성하여 괄호 안애 제거하고 싶은 숫자 2를 작성하면
결과 값으로 위처럼 제거하고 싶었던 2를 제외한 나머지 숫자가 출력된다.

네번째로 요소 차이이다.
셋이 여러가지가 있을 경우, 그 안의 다른 요소를 구별하는 방법으로 difference 메서드를 사용한다.


위 코드는 difference 메서드의 예를 들어본 것이다.

일주일의 시간 중 휴일을 제외한 근무 날짜를 뽑아낸다고 가정해 보자.
day 셋은 주 7일의 날짜를 1에서 7인 {1,2,3,4,5,6,7}로 생성하고
holiday 셋에는 휴일 날짜로 가정한 {2,5,7,8}을 생성하여 두 셋을 만들어준다.
day 셋에 있는 요소 중에 holiday에 들어가 있는 숫자를 제외한 날짜를 추려내야 하므로
work에 기존 셋인 day 바로 뒤에 'difference'란 메서드를 작성하고, 괄호 안에 제외해야 하는 요소가
있는 holiday를 적는다. 이후 work를 프린트하면 {1,3,4,6}가 출력되어 근무 날짜를 알 수 있게 된다.


Set의 집합 연산

처음은 합집합으로 집합 A와 B간의 모든 집합을 구하는 연산이다.


밑의 코드를 보시면 union_set은 odd 셋과 even 셋을 union 메서드로 합집합을 구해준 셋이다.
그래서 union_set을 프린트하면 {1..10}이 출력된다.
여기서 union 메서드를 바로 밑줄처럼 버티컬 라인으로 대체가 가능하다.


그 다음으로 교집합은 집합 A와 B간의 공통된 부분만을 구하는 연산이다.


역시 첫 줄의 코드의 intersection_set은 numbers 셋과 odd 셋을 intersection 메서드로 교집합을 구해준 셋이다.
그래서 intersection_set을 프린트하면 {2,4,6,8,10}이 출력된다.
여기서 intersection 메서드는 역시 밑줄의 앱퍼샌드 기호로 대체가 가능하다.


다음으로 심화 과정으로 차집합과 대칭차집합을 넣어봤다.
차집합은 A-B라 한다면 집합 A에서 집합 B의 공통된 부분을 뺀 집합을 구하는 연산이다.


역시 코드의 difference_set은 A 셋과 B 셋을 difference 메서드로 차집합을 구해준 셋이다.
앞에서 미리 봤듯이 difference 메서드는 -(마이너스)로 대체가 가능하다.


마지막 집합으로 대칭차집합이 있다. 대칭차집합은 배타적 논리합 즉 XOR(exclusive or)으로 불린다.


이 대칭차집합은 A와 B간의 합집합 중에서 교집합 부분을 뺀 집합을 말한다.
역시 첫 줄의 코드의 symmetric_difference_set은 A 셋과 B 셋을
symmetric_difference 메서드로 차집합을 구해준 셋이다.
이 메서드는 밑의 ^(캐럿) 기호로 대체가 가능하다.

'Today I Learned' 카테고리의 다른 글

2024.10.06 TIL  (3) 2024.10.06
2024.10.04 TIL  (0) 2024.10.04
2024.10.02 TIL  (10) 2024.10.02
2024.10.01 TIL  (0) 2024.10.01
2024.09.30  (2) 2024.09.30