이 글의 작성자는 C/C++ 프로그래밍을 하던 사람이다. 이 글은 Python을 복습하며 작성하는 글이니, 부족한 부분이 있으면 얼마든지 피드백을 주시기 바란다.

 

리스트(List)와 튜플(Tuple)

지금까지 알아본 데이터 타입들(정수, 부동소수점수, 문자열 등)은 기본 데이터 타입이라고 할 수 있다. 그리고 이번에 알아볼 데이터 타입인 리스트와 튜플데이터들을 담아두는 역할을 수행한다. 대충 밑의 그림처럼 생겼다고 보면 된다.

list

 

리스트와 튜플의 특징

그러면 리스트와 튜플은 어떤 특징이 있는지 알아보자.

  • 무엇이든지 담을 수 있다

리스트와 튜플을 소개할 때, 데이터들을 담아두는 역할을 한다고 했었다. 그렇다면 어떤 데이터를 담을 수 있을까?
결론부터 말하자면 모든 데이터를 담을 수 있다. 정수나 문자열은 물론이고, 리스트나 튜플도 담을 수 있다! 즉, 리스트 안에 리스트가 있을 수도 있고, 튜플 안에 튜플이 있을 수도 있다.

list in list

  • 순서가 있다

리스트를 표현한 그림을 잠시 살펴보자. 여러 데이터들이 들어있는데, 이 데이터들은 다음과 같이 위치해 있음을 알 수 있다.

‘hello’는 왼쪽에서 두 번째에 있다. 10.0은 맨 오른쪽에 있다.

위와 같이, 어디로부터 몇 번째에 있다라고 이야기 할 수 있음을 알 수 있다. 이는 위와 같이 줄을 세워놓지 않으면 할 수 없는 일이다.

그리고 이 특징은 문자열에서 본 적이 있을 것이다.

 

리스트와 튜플의 차이

이렇게보면 둘은 상당히 비슷해 보이지만, 무언가 차이가 있기 때문에 굳이 구분을 하고 있을 것이다. 그러면 이 둘의 차이점은 무엇인지 알아보자.

 

  • 가변성

리스트는 가변이고 튜플은 불변이다. 리스트에 있는 데이터는 수정, 추가, 제거가 가능하지만, 튜플은 불가능하다. 한 번 데이터들을 담았으면 끝까지 그 데이터들을 안고 가야 한다.

 

주요한 차이점은 이거 하나 뿐이다. 하지만 이 하나의 차이점 때문에 추가로 발생하는 차이점들이 있다.
아래의 내용은 지금 이해하고 넘어갈 필요는 없다. 아마 대부분 처음 보는 용어들이 튀어나올 것이다. 지금은 그냥 가변성 하나가 만들어낸 차이점들을 감상하고 넘어가자.

  • 리스트는 hash가 안되지만, 튜플은 가능하다.
  • 튜플이 메모리를 덜 사용한다.
  • 튜플이 순회하는 속도가 더 빠르다.

 

리스트/튜플 맛보기

그러면 본격적으로 리스트와 튜플을 찍어 먹어보자. 리스트와 튜플의 사용법은 비슷하다. 리스트에선 가능하나 튜플에선 불가능한 동작은 따로 표시하도록 하겠다.

 

생성하기

리스트는 이렇게 만들 수 있다.

>>> a = list()
>>> a
[]
>>> a = [1,2,3,4]
>>> a
[1, 2, 3, 4]

list()로 비어있는 리스트를 만들 수도 있고, [1, 2, 3, 4]처럼 대괄호 안에 미리 데이터들을 집어넣어서 만들 수도 있다. 단순히 a = []처럼 대괄호 안에 아무것도 넣지 않으면 a = list()와 같은 결과, 비어있는 리스트, 를 얻게 된다.

튜플도 비슷하다.

>>> a = tuple()
>>> a
()
>>> a = (1,2,3,4)
>>> a
(1, 2, 3, 4)

tuple()로 비어있는 튜플을 만들 수도 있고, (1, 2, 3, 4)처럼 괄호 안에 미리 데이터를 집어넣어서 만들 수도 있다. a = ()로 비어있는 튜플을 만들 수도 있다.

list()tuple()의 괄호 안에 리스트나 튜플을 집어넣으면 리스트/튜플로 데이터의 형태를 바꿀 수도 있다.

>>> a = [1,2,3,4]
>>> b = tuple(a)
>>> b
(1, 2, 3, 4)

심지어는 문자열을 집어넣어도 된다.

>>> a = list('hello')
>>> a
['h', 'e', 'l', 'l', 'o']
>>> b = tuple('hello')
>>> b
('h', 'e', 'l', 'l', 'o')

이를 한마디로 표현하자면, 순회 가능한 객체를 인자로 받는다고 이야기한다.

 

데이터 가져오기

문자열에서 하던 것 처럼 하면 된다. 완전히 똑같으므로 확인만 해 보도록 하자.

>>> a = (1,2,3,4,5)
>>> a[2:4]
(3, 4)
>>> 
>>> 
>>> a = [1,2,3,4]
>>> a[2]
3
>>> a[:2]
[1, 2]
>>> a[-1]
4
>>> a = (1,2,3,4)
>>> a[2]
3
>>> a[:2]
(1, 2)
>>> a[-1]
4

 

리스트/튜플 안의 리스트/튜플

특징을 이야기할 때, 리스트/튜플 안에 리스트/튜플 도 들어갈 수 있다고 이야기한 바 있다. 그러면 리스트/튜플 안의 리스트/튜플의 특정 데이터는 어떻게 가져오면 될까? 다음과 같은 리스트가 있다고 가정해보자.

>>> a = [[1,2,3],[4,5,6],[7,8,9]]

그러면 여기서 a의 0번째 인덱스, 즉 a[0]은 어떤 리스트를 가리키고 있을까? [1,2,3]을 담은 리스트를 가리키고 있다. 즉, a[0]은 [1,2,3]이다. 그러면 a[0]의 0번째 인덱스는 어떻게 표현해야 할까? 그냥 a[0][0]으로 표현하면 된다. 그러면 [1,2,3]리스트의 0번째 인덱스 데이터인 0을 가져오게 될 것이다.

정리하자만, 위의 리스트에서 각각의 값은 다음과 같이 표현할 수 있다.

list

 

데이터 존재여부 확인하기

a라는 리스트/튜플 안에 특정 데이터가 있는지 확인해보고 싶을 때가 있다. 이럴 때 사용할 수 있는 기능으로 in이라는 것이 존재한다.

상자 안에 연필을 영어로 표현하면 pencil in box이다.
A 안에 B를 영어로 표현하면 B in A이다.

즉, 리스트/튜플 a 안에 정수형 데이터 3이 있는지 확인해보고 싶다면 다음과 같이 표현하면 된다.

>>> a = [1,2,3]
>>> 3 in a
True
>>> 5 in a
False

결과가 나오는데, TrueFalse가 나오고 있다. True는 참이라는 뜻으로, a 안에 3이 있다는 뜻이다. False는 거짓이라는 뜻으로, a 안에 5가 없다는 뜻이다.
그러면 TrueFalse는 어떤 데이터일까?
(부울 로도 불리기도 한다) 데이터 타입이다. Boolean 단어의 앞에 4글자를 따서 만들어진 용어이다. 사실 TrueFalse만 표현하는 데이터 타입이라 따로 말할 건 없지만, 나중에 이 데이터 타입을 쓰는 일이 생기면 그 때 같이 설명하도록 한다.

 

리스트의 항목 수정/추가/제거하기

튜플은 불변이므로, 이 동작은 튜플에선 불가능한 동작임을 미리 알려둔다. 리스트는 가변이므로, 리스트의 항목을 수정하거나 추가, 제거할 수 있다.

 

  • 수정하기

간단하다. 수정하고자 하는 리스트의 인덱스에 새로운 데이터를 대입해주면 된다.

>>> a = [1,2,3]
>>> a[1] = 9
>>> a
[1, 9, 3]

 

  • 추가하기

리스트에 데이터를 추가하고 싶다고 존재하지 않는 인덱스에 데이터를 대입하면 안된다. 리스트의 특별한 기능을 사용해야 한다.

먼저 append에 대해 알아보자. append는 리스트의 맨 마지막에 데이터를 추가하는 리스트의 기능이다.
append의 사용법은 다음과 같다.

list.append(data)

list는 데이터를 집어넣을 리스트의 이름을 쓰면 된다.
data는 집어넣고자 하는 데이터의 이름을 쓰면 된다.

>>> a = [1,2,3]
>>> a.append(4)
>>> a
[1, 2, 3, 4]

그 다음으로 알아볼 기능은 insert다. insert는 리스트의 원하는 곳에 데이터를 추가하는 리스트의 기능이다.
insert의 사용법은 다음과 같다.

list.insert(index, data)

list는 데이터를 집어넣을 리스트의 이름을 쓰면 된다.
index는 집어넣고 싶은 데이터의 인덱스 값을 집어넣으면 된다.
data는 집어넣고자 하는 데이터의 이름을 쓰면 된다.

>>> a = [1,2,3]
>>> a.insert(1,9)
>>> a
[1, 9, 2, 3]

위에서 볼 수 있듯이, 원래 있던 데이터들은 하나씩 뒤로 밀리게 된다.

 

  • 제거하기

del을 이용하여 리스트에 들어있는 데이터를 지울 수 있다.

>>> a = [1,2,3,4]
>>> del a[1]
>>> a
[1, 3, 4]

리스트의 맨 뒤의 데이터를 지우고 싶다면 del[-1]을 써도 되지만, pop()이라는 리스트가 지원하는 기능을 사용해도 된다.

>>> a = [1,2,3,4]
>>> a.pop()
4
>>> a
[1, 2, 3]

위의 예시를 보면 a.pop()을 실행한 뒤 4가 출력된 것을 확인할 수 있을 것이다. 특이하게도 pop()은 리스트로부터 지워진 값을 돌려주는 특성을 가지고 있다.
나중에 이 특성을 잘 써먹을 날이 올 것이다.

 

Categories:

Updated:

Comments