파이썬을 배워보자 5일차 - 튜플

0

Python

목록 보기
5/18

점프 투 파이썬 : https://wikidocs.net/book/1
파이썬 기본을 갈고 닦자 : https://wikidocs.net/16031

튜플

튜플은 리스트와 거의 비슷하지만 몇 가지 특징적으로 다른 점이 있다.

  • 튜플은 ()을 사용한다. 튜플인지 알 수 있다면 ()을 제거해도 된다.
  • 튜플은 불변이다. 따라서 튜플은 그 값을 바꿀 수 없다.
  • 순서가 있다.
  • 리스트와 마찬가지로 다양한 타입들을 한꺼번에 넣을 수 있다.
  • 인덱스로 접근할 수 있다.

1. 튜플의 선언

t1 = ()
t2 = (1,)
t3 = (1,2,3)
t4 = 1,2,3 
t5 = ('a', 2, [1,2], ('12','ca'))

print(t1) # ()
print(t2) # (1,)
print(t3) # (1, 2, 3)
print(t4) # (1, 2, 3)
print(t5) # ('a', 2, [1, 2], ('12', 'ca'))

튜플은 ()을 사용하고, 때에 따라서는 ()없애고 사용할 수 있다. 은근히 튜플은 알게모르게 많이 사용되고 있으니 잘 알아두는 것이 좋다. 특히 ()을 없애고 함수에서 여러 파라미터를 리턴한다던지 할당하는 것이 가능하다.

2. 튜플의 요소값을 지우거나 변경하기

튜플은 리스트와 마찬가지로 인덱스로 접근이 가능하다.

t1 = (1,2,3)
print(t1[0] , t1[1] , t1[2]) # 1 2 3

그러나 인덱스로 접근하여 특정 원소를 변경하거나, 삭제하는 것은 불가능하다.

  • 삭제
t1 = (1,2,3)
del t1[0] # TypeError: 'tuple' object doesn't support item deletion
  • 변경
t1 = (1,2,3)
t1[0] = 2 # TypeError: 'tuple' object does not support item assignment

튜플은 불변 객체이기 때문에 삭제, 변경이 불가능하다. 이를 잘 알아두고 쓰도록 하자

3. 튜플 다루기

튜플이 불변이라는 것말고는 사실상 리스트와 다를 바가 없다. 인덱스로 접근, 슬라이싱, 더하기, 곱하기, len 등이 모두 가능하다.

3.1 슬라이싱

t1 = (1,2,3, 100,9,32,-1,'32')
print(t1[:]) # (1, 2, 3, 100, 9, 32, -1, '32')
print(t1[1:]) # (2, 3, 100, 9, 32, -1, '32')
print(t1[:3]) # (1, 2, 3)
print(t1[1:4]) # (2, 3, 100)

튜플이 슬라이싱이 가능한 이유는, 슬라이싱은 원본 객체를 바꾸는 것이 아닌 새로운 객체를 생성하기 때문이다.

3.2 더하기, 곱하기 연산

t1 = (1,2,3)
t2 = (100,9,32,-1,'32')
print(t1 + t2) # (1, 2, 3, 100, 9, 32, -1, '32')
print(t1 * 3) # (1, 2, 3, 1, 2, 3, 1, 2, 3)

3.3 len

t1 = (1,2,3)
t2 = (100,9,32,-1,'32')
print(len(t2)) # 5
print(len(t1 + t2)) # 8

4. 튜플 할당

튜플이 별로 유용해보이지 않는데 많이 사용되는 이유는 바로 튜플이 할당하는데 있어 좋은 방법을 가지고 있기 때문이다.

def retTuple():
    t1 = (32, 41)
    return t1

val1, val2 = retTuple()
print(val1, val2)

def로 선언한 함수 retTuple이 있다. 아직 함수에 대해서 배우지 않았지만, 어찌됐든 튜플 t1 = (32, 41)을 return 하는 것은 알겠다.

그리고 튜플을 리턴하면 val1, val2로 받을 수 있다. 이러한 방식은 js의 비구조할당과 비슷하다.

이러한 것들이 가능한 이유는 튜플을 사용할 때 굳이 ()을 붙이지 않아도 되기 때문이다. 그래서 함수에서 return 할 때 ()을 붙이지 않아도 된다.

이러한 튜플의 장점은 swap을 할 때도 아주 좋은 장점이 된다. 다른 언어의 경우 temp 변수를 두고 swap을 해야하는데, 튜플은 temp 변수 없이 swap이 가능하다.

val1 = 2
val2 = 4
print(val1, val2) # 2 4
val1 , val2 = val2 , val1
print(val1, val2)  # 4 2

또한 다음과 같이 복잡한 튜플도 간단하게 할당이 가능하다.

(a, (b, (c, d))) = (4, (3, (2,1)))
print(a , b , c, d) # 4 3 2 1

5. tuple 형변환

iterable한 객체는 tuple로 변환이 가능하다. iterable한 객체는 list, 문자열 등이 있다.

a = [1,7, 5, 3, 9]
print(tuple(a)) # (1, 7, 5, 3, 9)

b = "hello!"
print(tuple(b)) # ('h', 'e', 'l', 'l', 'o', '!')

0개의 댓글