1 life 2 live

파이썬 기초 프로그래밍(6-1) - 자료구조2 (세트) [20.7.17] 본문

파이썬

파이썬 기초 프로그래밍(6-1) - 자료구조2 (세트) [20.7.17]

대희투 2020. 7. 17. 19:10

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)))

728x90
반응형
Comments