자료구조(파이썬) - 튜플

◾튜플

  • 튜플(Tuple) : 리스트와 비슷하지만 아이템 변경이 불가능
    • ('강호동', '박찬호', '이용규', '박승철', '강호동', '김지은')
    • 아이템 변경(수정, 삭제 등) 불가능
    • 숫자, 문자(열), 논리형 등 모든 기본 데이터 같이 저장 가능
    • 다른 컨테이너 자료형 데이터 저장 가능
# 튜플
students = ('강호동', '박찬호', '이용규', '박승철', '강호동', '김지은')
print(students)
print(type(students))

# students[0] = 'Test' # 변경 불가, 오류 발생
  • 리스트와 마찬가지로 인덱스를 활용하여 아이템 조회
# 인덱스
students = ('강호동', '박찬호', '이용규', '박승철', '강호동', '김지은')
print(students)
print(students[0])
print(students[1])
print(students[2])

# 오류 발생
# print('없는 인덱스 : {}'.format(students[6])) 
  • 아이템 존재 유무 판단
    • 아이템 in 튜플 : 튜플에 아이템이 있는 경우 True
    • 아이템 not in 튜플 : 튜플에 아이템이 없는 경우 True
# 아이템 존재 유무 판단
students = ('홍길동', '박찬호', '이용규', '박승철', '김지은')
searchName = input('학생 이름 입력 : ')
# in
if searchName in students:
    print('in - {} 학생은 존재합니다.'.format(searchName))
else:
    print('in - {} 학생은 존재하지 않습니다.'.format(searchName))
print('='*35)
# not in
if searchName not in students:
    print('not in - {} 학생은 존재하지 않습니다.'.format(searchName))
else:
    print('not in - {} 학생은 존재합니다.'.format(searchName))
  • len() : 튜플의 길이(아이템의 개수)를 반환하는 함수
# len()
students = ('홍길동', '박찬호', '이용규', '박승철', '김은지', '강호동')
studentLength = len(students)
print(students)
print("len : {}".format(studentLength))

◾튜플 결합

  • +(덧셈 연산자) : 양 튜플을 연결(확장)하여 새로운 튜플을 반환
    • 튜플은 값의 변경이 불가능하므로 결합이 불가능하지만 덧셈 연산자는 새로운 튜플을 반환하는 것이므로 사용할 수 있다.
    • 리스트의 extend, remove, append 등은 사용할 수 없다.
# +(덧셈 연산자)
studentTuple1 = ('홍길동', '박찬호', '이용규')
studentTuple2 = ('박승철', '김지은', '강호동')
print(studentTuple1)
print(studentTuple2)

newStudents = studentTuple1 + studentTuple2
print(newStudents)

◾튜플 슬라이싱

  • [시작:종료:간격] : 시작 <= n < 종료의 범위를 간격을 기준으로 아이템을 뽑을 수 있다.
    • 튜플에서 슬라이싱을 이용해 아이템을 변경할 수 없다
# 슬라이싱
students = ('홍길동', '박찬호', '이용규', '박승철', '김은지', '강호동')
print('1. {}'.format(students))
# 1. ('홍길동', '박찬호', '이용규', '박승철', '김은지', '강호동')
print('2. {}'.format(students[2:4]))
# 2. ('이용규', '박승철')
print('3. {}'.format(students[2:5:2]))
# 3. ('이용규', '김은지')

# 리스트의 아이템을 튜플 형식을 사용해 바꾸는 것은 가능하다
students = ['홍길동', '박찬호', '이용규', '박승철', '김은지', '강호동']

students[1:4] = ('park chanho', 'lee yonggyu', 'park seungcheol')
# 타입은 여전히 리스트이다.
print(students)
print(type(students))
  • slice(시작, 종료, 간격)
students = ('홍길동', '박찬호', '이용규', '박승철', '김은지', '강호동')

print('1. {}'.format(students))
# 1. ('홍길동', '박찬호', '이용규', '박승철', '김은지', '강호동')
print('2. {}'.format(students[slice(2,4)]))
# 2. ('이용규', '박승철')
print('3. {}'.format(students[slice(2,5,2)]))
# 3. ('이용규', '김은지')

◾리스트와 튜플

  • 리스트 : 아이템 추가, 변경, 삭제가 가능하다.
  • 튜플 : 아이템 추가, 변경, 삭제가 불가능하다.
# 리스트 추가, 변경, 삭제 가능
studnetList = ['홍길동', '박찬호', '이용규']
print(studnetList)
# 추가
studnetList.append('강호동')
print(studnetList)
# 변경
studnetList[2] = '유재석'
print(studnetList)
# 삭제
studnetList.pop()
print(studnetList)

# 튜플 추가, 변경, 삭제 불가능
studnetTuple = ('홍길동', '박찬호', '이용규')
print(studnetTuple)
# 추가 : 오류 발생
# studnetTuple.append('강호동')
# 변경 : 오류 발생
# studnetTuple[2] = '유재석'
# 삭제 : 오류 발생
# studentTuple.pop()
  • 튜플은 선언 시 괄호 생략이 가능하다.
  • 리스트는 선언 시 괄호 생략이 불가능하다.
# 튜플 괄호
studentTuple = ('홍길동', '박찬호', '이용규')
print('type : {}, tuple : {}'.format(type(studentTuple), studentTuple))

# 튜플 괄호 생략
studentTuple = '홍길동', '박찬호', '이용규'
print('type : {}, tuple : {}'.format(type(studentTuple), studentTuple))

# 리스트 괄호
studentList = ['홍길동', '박찬호', '이용규']
print('type : {}, tuple : {}'.format(type(studentList), studentList))
  • 리스트와 튜플 변환 : 리스트와 튜플은 자료형 변환 가능
# 리스트
studentList = ['홍길동', '박찬호', '이용규']
print('type : {}, tuple : {}'.format(type(studentList), studentList))
# 아이템의 값을 변경하고 싶지 않다면 튜플로 변환하면 된다.
castingTuple = tuple(studentList)
print('type : {}, tuple : {}'.format(type(castingTuple), castingTuple))

# 튜플
studentTuple = ('홍길동', '박찬호', '강호동')
print('type : {}, tuple : {}'.format(type(studentTuple), studentTuple))
# 아이템 값을 변경하고 싶다면 리스트로 변환하면 된다.
castingList = list(studentTuple)
print('type : {}, tuple : {}'.format(type(castingList), castingList))

◾튜플 정렬

  • 튜플은 수정이 불가하기 때문에 리스트로 변환 후 정렬
# 정렬
students = ('홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은')
print(students)
# 리스트 변환
students = list(students)
# 정렬
students.sort(reverse=False)
# 튜플 변환
students = tuple(students)
print(students)
  • sorted() : 정렬 함수로 리스트 자료형으로 반환
    • 튜플도 정렬할 수 있지만 다시 튜플로 형변환을 해야한다.
    • sorted(데이터, reverse=flag)
# sorted()
students = ('홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은')
print(students)
newStudents = sorted(students, reverse=False)
print(newStudents)
newStudents = tuple(newStudents)
print(newStudents)

◾튜플 반복문

1. For 문

  • for문을 이용해 튜플의 아이템을 참조할 수 있다.
# for
# len()
cars = ('그랜저', '소나타', '말리부', '카니발', '쏘렌토')
for i in range(len(cars)):
    print(cars[i])
    
# Iterable
for car in cars:
    print(car)
    
# enumerate()
for idx, car in enumerate(cars):
    print(car)

2. While 문

  • while문을 이용해 튜플의 아이템을 참조할 수 있다.
# while
cars = ('그랜저', '소나타', '말리부', '카니발', '쏘렌토')
# len() 사용
n = 0
while n < len(cars):
    print(cars[n])
    n += 1

# flag 사용
n = 0
while True:
    print(cars[n])
    n += 1

    if n == len(cars):
        break

좋은 웹페이지 즐겨찾기