본문 바로가기

IT/[Python]

[Python] 파이썬 내장 자료구조 tuple

728x90
반응형

4월 국비교육을 시작으로 12월 해커톤 경진대회를 마친 시점에서

뭔가 열심히 하긴 했지만 정리 돼있다는 느낌을 받지 못했다.

입사 전 약 2주 동안

배운 내용들, 부족한 부분, 기초적인 개념 등을 추가하며 학습을 진행해보겠습니다~!

참고도서는 다음과 같습니다.

파이썬 라이브러리를 활용한 데이터 분석

 

파이썬 자료구조는 단순하지만 강력!!  자료구조를 잘 다루는 것이 파이썬 고수의 지름길

 

 

 

튜플 (Tuple)

- 1차원의 고정된 크기를 가지는 변경 불가능한 순차 자료형, 쉼표로 구분된 값을 대입하여 생성한다.

tup = 4,5,6
tup

(4, 5, 6)

소괄호를 사용해 값을 묶어줌으로써 중첩 튜플을 정의할 수 있다. ex) 튜플 안의 튜플

nested_tup = (4,5,6),(7,8)
nested_tup

((4, 5, 6), (7, 8))

모든 순차 자료형이나 이터레이터는 tuple method를 호출해 튜플로 변환할 수 있다.

tuple([4,0,2]) # 리스트 형태를 튜플로 변환

(4, 0, 2)

tup = tuple('string') #문자열도 변환가능
tup

('s', 't', 'r', 'i', 'n', 'g')

튜플의 각 원소는 대괄호 []를 이용해서 다른 순차 자료형처럼 접근할 수 있다. C,C++,Java 등 다른 언어들과 마찬가지로 순차자료형의 index는 0부터 시작

tup[0]

's'

튜플에 저장된 객체 자체는 변경이 가능하지만 한 번 생성되면 각 슬롯에 저장된 객체를 변경할 수 없다.

tup=tuple(['foo',[1,2],True])
tup[2]=False

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-8-914f49ef33f9> in <module>()
      1 tup=tuple(['foo',[1,2],True])
----> 2 tup[2]=False

TypeError: 'tuple' object does not support item assignment

튜플 내에 저장된 객체는 그 위치에서 바로 변경이 가능하다.

tup[1].append(3) # 1번째의 리스트에 3을 추가
tup

('foo', [1, 2, 3], True)

+ 연산자를 이용하여 튜플을 이어붙일 수 있다.

(4, None, 'foo') + (6,0) + ('bar',)

(4, None, 'foo', 6, 0, 'bar')

만일 튜플과 같은 표현의 변수에 튜플을 대입하면 파이썬은 등호 오른쪽에 있는 변수에서 값을 분리한다.

tup = (4,5,6)
a,b,c = tup
b

5

중첩된 튜플을 포함하는 순차 자료형에서도 값을 분리해낼 수 있다.

tup = 4,5,(6,7)
a,b,(c,d) = tup # 형태가 맞지 않을 경우 에러 발생
d

7

이 기능을 사용하면 변수의 이름을 바꿀 때 다른 언어에서는 아래처럼 처리하는 것을 쉽게 해결할 수 있다.

tmp = a
a = b
b = tmp

파이썬에서는 다음과 같이 하여 두 변수의 값을 쉽게 바꿀 수 있다.

 

a,b = 1,2
print(a,b)

1 2

b,a = a,b
print(a,b)

2 1

튜플이나 리스트를 순회할 때도 흔히 이 기능을 활용

seq = [(1,2,3),(4,5,6),(7,8,9)]

for a,b,c in seq:
  print('a={0}, b={1}, c={2}'.format(a,b,c))
  
a=1, b=2, c=3
a=4, b=5, c=6
a=7, b=8, c=9

 

파이썬은 최근 튜플의 처음 몇몇 값을 끄집어내야하는 상황을 위해 튜플에서 값을 분리하는 진보된 방법을 수용했다.

특수한 문법인 *rest 사용

values = 1,2,3,4,5
a,b,*rest = values
print(a, b, rest)

1 2 [3, 4, 5]

rest는 필요 없는 값을 무시하기 위해 사용하기도 한다. rest라는 이름 자체에는 특별한 의미x

불필요한 변수라는 것을 나타내기 위해 _를 사용하는 관습도 있다.

a,b, *_ = values
a,b

(1, 2)

 

튜플의 크기와 내용은 변경할 수 없기때문에 인스턴스 메서드가 많지 않다.

유용하게 사용되는 메서드 중 하나는 주어진 값과 같은값이 몇 개 있는지 반환하는 count 메서드이다.(리스트에서도 사용가능)

a = 1,2,2,2,3,4,2
a.count(2)

4

 

요약

 

- 튜플은 1차원의 고정된 크기를 가지는 변경 불가능한 순차 자료형

- 쉼표로 구분된 값 대입

- 소괄호로 표현됨

- 튜플 내의 리스트는 변경 가능하지만 위치의 data는 변경 불가

반응형