[Python] 4. 튜플 & 집합
튜플(Tuple)
1. 튜플 선언
- 소괄호(( )) 안에 쉼표(,)로 구분한 값을 나열하여 선언
- tuple() 혹은 ( )로 빈 튜플 생성 가능
- len()함수로 요소 개수 확인 가능
- 요소의 자료형이 동일하지 않아도 사용 가능
- 튜플을 요소로 가지는 튜플 생성 가능
- 소괄호 생략 가능
- 요소가 하나인 튜플을 만들 때 쉼표 추가 필요
- 리스트와 달리 튜플은 요소 변경 불가
# 기본 표현
# 빈 튜플 생성
my_tuple1 = ()
my_tuple2 = tuple()
# 확인
print(my_tuple1) # ()
print(my_tuple2) # ()
# 튜플 생성
my_tuple3 = (85, 90, 100, 80, 75)
# 확인
print(my_tuple3) # (85, 90, 100, 80, 75)
# 요소 개수 확인
print(len(my_tuple3)) # 5
# 다양한 자료형 튜플 생성 - 숫자형, 논리형, 문자형, 리스트, 튜플
my_tuple4 = (85, 100, True, False, "문자열", [1, 2, 3], (10, 20))
# 확인
print(my_tuple4) # (85, 100, True, False, '문자열', [1, 2, 3], (10, 20))
# 소괄호 생략 가능
my_tuple5 = 85, 90, 100
# 확인
print(my_tuple5) # (85, 90, 100)
# 요소가 하나인 튜플 생성
my_tuple6 = (95,)
print(my_tuple6) # (95,)
print(type(my_tuple6)) # <class 'tuple'>
2. 튜플 연산
- 튜플 + 튜플 = 튜플 결합
- 튜플 * 정수 = 튜플 반복
- 튜플에 빼기와 나누기 연산은 불가능
- 튜플에 음수나 0을 곱하면 튜플 요소 제거
# 튜플 선언
my_tuple1 = (85, 90, 100, 80, 75)
my_tuple2 = (70, 95, 90)
# 튜플 결합
my_tuple3 = my_tuple1 + my_tuple2
# 확인
print(my_tuple3) # (85, 90, 100, 80, 75, 70, 95, 90)
# 튜플 반복
my_tuple4 = my_tuple2 * 2
# 확인
print(my_tuple4) # (70, 95, 90, 70, 95, 90)]
# 튜플 제거 - 빈 튜플 생성
my_tuple5 = my_tuple4 * 0
# 확인
print(my_tuple5) # ()
3. 튜플 표현
3.1 튜플 인덱싱(Indexing)
- 인덱스를 사용해 튜플안에서 특정 요소를 찾는 과정
- 대괄호 안에 정수형 인덱스를 지정하여 원하는 위치의 요소 확인
- 인덱스 값은 0부터 시작
- 튜플을 요소로 가지는 튜플 인덱싱 가능
A | B | C | (1, 2, 3) | 4 | 5 | True | False | (10, 20) | |
순방향 인덱스 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
역방향 인덱스 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
# 튜플 인덱싱
# 튜플 선언
my_tuple = ("A", "B", "C", [1, 2, 3], 4, 5, True, False, (10, 20))
print(my_tuple[0]) # A
print(my_tuple[5]) # 5
print(my_tuple[-1]) # (10, 20)
print(my_tuple[-4]) # 5
print(my_tuple[-1][0]) # 10
3.2 튜플 슬라이싱(Slicing)
- 인덱스를 사용해 튜플 안에서 특정 범위의 요소를 찾는 과정
- 대괄호 안에 정수형 인덱스로 범위를 지정하여 요소 확인
- [m, n] : 인덱스 m부터 n-1까지의 요소 출력
# 튜플 슬라이싱
# 튜플 선언
my_tuple = ("A", "B", "C", [1, 2, 3], 4, 5, True, False, (10, 20))
print(my_tuple[0:3]) # ('A', 'B', 'C')
print(my_tuple[2:6]) # ('C', [1, 2, 3], 4, 5)
print(my_tuple[:4]) # ('A', 'B', 'C', [1, 2, 3])
print(my_tuple[2:]) # ('C', [1, 2, 3], 4, 5, True, False, (10, 20))
print(my_tuple[:]) # ('A', 'B', 'C', [1, 2, 3], 4, 5, True, False, (10, 20))
print(my_tuple[8][:2]) # (10, 20)
참고)
여러 변수에 동시에 값을 대입하거나 두 변수 값 교환 가능
집합(Set)
1. 집합 선언
1.1 기본 표현
- 중괄호({ }) 안에 쉼표(,)로 구분한 값을 나열하여 선언
- { }을 사용하여 빈 집합 생성 가능
- len()함수로 요소 개수 확인 가능
- 요소의 자료형이 동일하지 않아도 사용 가능
- 중복이 허용되지 않아 중복된 요소는 하나만 표시
- 원소의 순서가 의미없으므로 인덱싱과 슬라이싱 사용 불가능
# 기본 표현
# 빈 집합 생성
my_set1 = {}
# 확인
print(my_set1) # {}
# 튜플 생성
my_set2 = {85, 90, 100, 80, 75}
# 확인
print(my_set2) # {80, 100, 85, 90, 75}
# 요소 개수 확인
print(len(my_set2)) # 5
# 다양한 자료형 튜플 생성 - 숫자형, 논리형, 문자형, 튜플
my_set3 = {85, 100, True, False, "문자열", (10, 20)}
# 확인
print(my_set3) # {False, True, '문자열', 100, 85, (10, 20)}
# 중복 불가
my_set4 = {1, 2, 3, 4, 5, 3, 2, 5, 6, 7, 5}
# 확인
print(my_set4) # {1, 2, 3, 4, 5, 6, 7}
1.2 자료형 변환
- set() 함수를 사용하여 다른 자료형을 집합으로 변환
# 집합으로 자료형 변환
# 문자열 → 집합
my_string = "안녕하세요!"
print(set(my_string)) # {'하', '녕', '!', '요', '세', '안'}
# 리스트 → 집합
my_list = [1, 2, 3, 4, 5, 3, 2, 5, 6, 7, 5]
print(set(my_list)) # {1, 2, 3, 4, 5, 6, 7}
# 튜플 → 집합
my_tuple = (1, 2, 3, 4, 5, 3, 2, 5, 6, 7, 5)
print(set(my_tuple)) # {1, 2, 3, 4, 5, 6, 7}
2. 집합 연산
2.1 합집합(Union)
- union() 혹은 | 사용하여 집합 자료형들의 합집합을 구함
# 집합 선언
my_set1 = {1, 2, 3, 6}
my_set2 = {1, 2, 4}
# 합집합
my_set3 = my_set1 | my_set2
my_set4 = my_set1.union(my_set2)
# 확인
print(my_set3) # {1, 2, 3, 4, 6}
print(my_set4) # {1, 2, 3, 4, 6}
2.2 교집합(Intersection)
- intersection() 혹은 & 사용하여 집합 자료형들의 교집합을 구함
# 집합 선언
my_set1 = {1, 2, 3, 6}
my_set2 = {1, 2, 4}
# 교집합
my_set3 = my_set1 & my_set2
my_set4 = my_set1.intersection(my_set2)
# 확인
print(my_set3) # {1, 2}
print(my_set4) # {1, 2}
2.3 차집합(Difference)
- difference() 혹은 - 사용하여 집합 자료형들의 차집합을 구함
# 집합 선언
my_set1 = {1, 2, 3, 6}
my_set2 = {1, 2, 4}
# 차집합
my_set3 = my_set1 - my_set2
my_set4 = my_set1.difference(my_set2)
# 확인
print(my_set3) # {3, 6}
print(my_set4) # {3, 6}
2.4 대칭 차집합(Symmetric Difference)
- symmetric_difference() 혹은 ^ 사용하여 집합 자료형들의 대칭 차집합을 구함
# 집합 선언
my_set1 = {1, 2, 3, 6}
my_set2 = {1, 2, 4}
# 대칭 차집합
my_set3 = my_set1 ^ my_set2
my_set4 = my_set1.symmetric_difference(my_set2)
# 확인
print(my_set3) # {3, 4, 6}
print(my_set4) # {3, 4, 6}
3. 집합 관련 메소드
- add() : 집합에 요소 하나 추가
- update() : 집합에 여러 요소 추가
- pop() : 집합의 요소 하나 무작위 제거
- remove() : 집합의 특정 값을 제거, 집합에 존재하지 않는 요소를 제거하면 오류 발생
- discard() : 집합의 특정 값을 제거, 집합에 존재하지 않는 요소를 제거해도 오류가 발생하지 않음
- clear() : 집합의 모든 요소 제거
# 집합 선언
num = set(range(5))
# 확인
print(num) # {0, 1, 2, 3, 4}
# 요소 하나 추가
num.add(5)
# 확인
print(num) # {0, 1, 2, 3, 4, 5}
# 요소 여러개 추가
num.update([6, 7, 8, 9])
# 확인
print(num) # {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
# 요소 하나 무작위 제거
num.pop()
# 확인
print(num) # {1, 2, 3, 4, 5, 6, 7, 8, 9}
# 요소 삭제(집합에 없는 값 입력할 경우 오류 발생)
num.remove(8)
# 확인
print(num) # {1, 2, 3, 4, 5, 6, 7, 9}
# 요소 삭제
num.discard(3)
# 확인
print(num) # {1, 2, 4, 5, 6, 7, 9}
# 전부 제거
num.clear()
# 확인
print(num) # set()
참고)
집합은 중복 요소를 허용하지 않기 때문에 리스트 혹은 튜플에서 중복 요소 제거에 사용 가능