1 life 2 live
파이썬 기초 프로그래밍(6-1) - 자료구조2 (세트) [20.7.17] 본문
1. 자료구조의 개요
■ 자료구조
º 리스트 (List)
º 튜플 (Tuple)
º 세트 (Set)
º 딕셔너리 (Dictionary)
■ 문자열
■ 여러 값들을 효과적으로 저장, 처리하기 위한 방안이 필요!
■ 순서가 중요한 자료의 모음
º 리스트
º 튜플
■ 순서는 없지만 유일성(uniqueness)이 중요한 자료의 모음
º 딕셔너리
º 집합
2. 세트 (Set)
■ 오직 유일한 요소만이 표함되며, 요소간에 순서가 없는 자료구조
■ 선언 방법 1

■ 선언 방법 2
º set() 메소드 이용: set(리스트/문자열)
■ 세트 선언 예제

º 빈 세트
• 주의: a = {}는 빈 세트를 생성하는 명령이 아님!
º 숫자로 이루어진 세트
º 문자/문자열로 이루어진 세트
º 숫자와 문자열이 혼합된 세트
º 등등…
■ 세트의 속성 : 유일한 값
º 아래 세트에는 어떠한 내용이 담겨지는가?


■ 세트의 속성 : 순서가 없다
º 인덱싱/슬라이싱 불가, 왜?
º 위에 생성된 세트에 대하여 인덱싱을 시도한다면?


■ 세트의 활용처
º 멤버십 테스팅
• 스퀀스 형태 자료구조의 일반적인 활용법
• in, not in 연산자를 통하여 테스트 가능
º 중복 제거
• 세트로 변환하는 것만으로도 중복이 제거됨
• 세트는 유일한 값만이 저장됨!
º 집합 관련 연산
• 교집합 / 합집합 / 차집합 / 대칭차
• 부분집합
■ 세트의 멤버십 테스팅
º 포함 연산자
º in 연산: x in set (x: 값, set: 세트)
• 특정 값 x가 세트 set에 포함되어 있는지 여부 판별
˙ 결과: True, 값이 세트에 포함되어 있을 경우
˙ 결과: False, 값이 세트에 포함되어 있지 않은 경우
º not in 연산: x not in set (x: 값, set: 세트)
• 특정 값 x가 세트 set에 포함되어 있지 않은지 여부 판별
˙ 결과: True, 값이 세트에 포함되어 있지 않은 경우
˙ 결과: False, 값이 세트에 포함되어 있을 경우
■ 포함 연산자 사용 예)

º 어떤 결과가 나올까? -> set의 값과 아닌 값을 확인 가능하다

º 3번 라인의 리스트를 세트로 변경하면 어떻게 될까? -> 그래도 잘 나온다. (순서는 랜덤이다)


■ 세트 중복 제거
º 10개의 문자를 입력받고 유일한 값만을 출력하자!

• 리스트의 출력 내용은?
• 세트의 출력 내용은?

■ 세트의 합집합 연산 (|)
º 두 개의 세트를 합하는 연산: |연산
º 예)



■ 세트의 교집합 연산 (&)
º 두 개의 세트 중 공통부분만 취하는 연산: &연산
º 예)

º 합집합의 결과는?

º 교집합의 결과는?


■ 세트의 차집합 연산 (-)
º 두 집합의 차를 취하는 연산: -연산
º 예)


º 교환법칙이 성립하지 않는다!

■ 세트의 대칭차 연산 (^)
º 한 쪽 세트에만 포함되는 요소들을 취하기 위한 연산: ^연산
º 예)

º 어떤 결과가 출력되는가?


■ 세트의 부분집합 연산 (<=, >=)
º 부분집합 관계를 판단하기 위한 연산
º A <=B, A가 B의 부분집합인가? 결과: True/False
º A >=B, A가 B를 포함하고 있는가? 결과: True/False


■ 세트의 응용 메소드
º 세트는 자체적으로 추가 기능들을 보유하고 있음!
• IDE에서 세트에 .을 직고 확인해보자!

■ 응용 메소드 추가
º 단일 값의 추가: add(x)
º 이미 세트에 존재하는 값에 대해서는 아무런 동작이 발생하지 않음


º 복수 값들의 추가: update(t)
• 세트 t안에 존재하는 요소들이 추가 됨
• 중복된 값들은 추가되지 않음


■ 응용 메소드 삭제
º 단일 값의 삭제 방법 1: discard(x)
º 단일 값의 삭제 방법 2: remove(x)
• 값이 세트에 존재하지 않을 경우, 에러 발생!
º 단일 값의 삭제 방법 3: pop()
• 어떤 값이 삭제 될 지 알 수 없다!
º 전체 요소의 제거: clear()
• 모든 요소가 사라진 세트: set()
• 빈 세트는 {}가 아니다!


■ 세트는 자체적으로 추가 가능들을 보유하고 있음!
º IDE에서 세트에 .을 찍고 확인해보자!

■ 부분집합 연산
º 부분집합 연산자와 동일하게 동작


■ 집합 연산
º 집합 연산자와 동일하게 동작


2. 실습
■ 실습1) 10개의 숫자를 입력받아 중복되지 않는 숫자들을 오름차순으로 출력하기 위한 프로그램을 작성하시오.
º list() 메소드를 이용하면 세트,튜플 등을 리스트로 만들 수 있음
• 예) my_list = list({1,2,3})
º sorted(범위값): 범위값을 오름차순 정렬한 리스트를 반환
• sorted({7,5,3,1}) → [1,3,5,7] 반환

↓정답
num = set()
for i in range(10):
num.add(int(input('%d 번째 숫자를 입력하세요: ' %(i+1))))
num=list(num)
num.sort()
print(num,'유일한 숫자의 개수: ', len(num))
■ 실습2) 사용자로부터 구구단을 생성 할 숫자 2개를 입력받은 후, 각 단에 공통으로 존재하는 숫자만을 오름차순으로 출력하기 위한 프로그램을 작성하시오.
º List comprehension을 시도해보자!
º sorted(범위값): 범위값을 오름차순 정렬한 리스트를 반환
• sorted({7,5,3,1}) → [1,3,5,7] 반환

↓정답
base_list = [1,2,3,4,5,6,7,8,9]
num1 = int(input('첫 번째 단? '))
num2 = int(input('두 번째 단? '))
set1 = [i * num1 for i in base_list]
set2 = [i * num2 for i in base_list]
print(set1)
print(set2)
print('공통 요소: ', sorted(set(set1) & set(set2)))
'파이썬' 카테고리의 다른 글
| 파이썬 기초 프로그래밍(7) - 자료구조3 (문자열) [20.7.25] (0) | 2020.07.25 |
|---|---|
| 파이썬 기초 프로그래밍(6-2) - 자료구조2 (딕셔너리) [20.7.18] (0) | 2020.07.18 |
| 파이썬 기초 프로그래밍(5-3) - 자료구조1 (튜플 및 정리) [20.7.16] (0) | 2020.07.16 |
| 파이썬 기초 프로그래밍(5-2) - 자료구조1 (리스트 및 실습) [20.7.15] (0) | 2020.07.15 |
| 파이썬 기초 프로그래밍(5-1) - 자료구조1 (리스트) [20.7.14] (0) | 2020.07.14 |