파이썬 기초 정리(자료형-튜플)

튜플

리스트와 비교하여 생각하자.

튜플 자료형은 ( 순서 O, 중복 O, 수정X, 삭제X ) 즉, 한번 선언하면 끝까지 쓴다. 변하면 안 되는 데이터를 정의해놓으면 좋다.

선언

a = ()
b = (1) 
print(type(a), type(b)) # <class 'tuple'> <class 'int'>
c = (1,) # 원소가 하나일 때 튜플이 되려면 , 를 찍어줘야 한다.
d = (1, 100, 1000, 'Ace', 'Base', 'Captine')
e =  (1, 100, 1000, ('Ace', 'Base', 'Captine')) # 튜플안에 튜플 선언 가능.

f = 1,2,3

마지막 f처럼 가로가 없어도 튜플 선언이 된다.

인덱싱

print(d[0] + d[1]) # 101
print(e[-1]) # ('Ace', 'Base', 'Captine')
print(e[-1][1]) # 'Base'

리스트 자료형과 같은 방법으로 인덱싱이 가능하다.

print(list(e[-1][1])) # ['B', 'a', 's', 'e']

튜플에서 리스트로 형 변환을 하게 되면, 불변성이 사라지고 리스트 자료형의 특성을 갖는다.

수정이 정말 안될까?

d = (1, 100, 1000, 'Ace', 'Base', 'Captine')
d[0] = 'edit' # TypeError: 'tuple' object does not support item assignment

슬라이싱

e =  (1, 100, 1000, ('Ace', 'Base', 'Captine'))
print(e[:3]) # (1, 100, 1000)
print(e[3][1:]) # ('Base', 'Captine')

마찬가지로 튜플의 슬라이싱은 리스트 자료형의 슬라이싱과 같은 특성을 갖는다.

튜플 연산

d = (1, 100, 'Ace', 'Base', 'Captine')
e =  (100, ('Ace', 'Base', 'Captine'))
print(d+e) # (1, 100, 'Ace', 'Base', 'Captine', 100, ('Ace', 'Base', 'Captine'))
print(d*2) # (100, ('Ace', 'Base', 'Captine'), 100, ('Ace', 'Base', 'Captine'))

튜플은 수정과 삭제가 불가능 하지만 연산은 허용한다.

튜플 함수 ( 일부 )

a = (5, 2, 3, 1, 4, 2)
print(a.index(3)) # 2
print(a.index(10)) # ValueError: tuple.index(x): x not in tuple
print(a.count(2)) # 2
  • tuple.index(value) : tuple에서 value가 들어있는 index 반환
  • tuple.count(value) : tuple에서 값이 value인 원소의 개수 반환

팩킹과 언팩킹( 중요!! )

  • 팩킹

t = ('foo', 'bar', 'baz', 'quz') # 4개의 원소를 하나로 묶음(팩킹)
print(t[0]) # 'foo'

팩킹은 여러가지를 하나로 묶는 것 이다. 묶었기 때문에 인덱싱도 가능하다.

  • 언팩킹

t = ('foo', 'bar', 'baz', 'quz')
(x1, x2, x3, x4) = t 
print(type(x1), type(x2), type(x3), type(x4)) # 모두 <class 'str'>
print(x1, x2, x3, x4) # 'foo' 'bar' 'baz' 'quz'

언팽킹은 묶여 있던 것을 풀어서 각각의 순서에 맞는 원소에 대입 된 것이다. ( 자바스크립트의 비구조화 할당과 비슷하네 ? )

# 가로가 있어도 없어도 언팩킹이 된다.
(x1, x2, x3, x4) = t 
x1, x2, x3, x4 = t 
  • 패킹과 언팩킹

t2 = 1,2,3 # 팩킹, 가로가 없어도 튜플
t3 = 4 # 팩킹
x1, x2, x3 = t2 # 언팩킹
x4, x5, x6 = 4,5,6  # 언팩킹, 튜플을 풀어서 x4, x5, x6에 할당

Written by@[HongDongUk]
공부한 것을 소소하게 적는 블로그.

GitHubFacebook