STUDY/PYTHON

[Python] 4. 튜플 & 집합

짤롱 2024. 11. 9. 21:05
728x90

튜플(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()

 

참고)

집합은 중복 요소를 허용하지 않기 때문에 리스트 혹은 튜플에서 중복 요소 제거에 사용 가능

반응형