IT

[파이썬 기초] 자료구조(5) - 기본자료구조를 이용한 복합자료구조 만들기

생각파워 2018. 12. 12. 17:35

지금까지 리스트, 튜플, 딕셔너리, 셋과 같은 파이썬에서 기본적으로 제공하는 자료구조에 대해 알아보았다.

프로그래밍을 할 때 자료구조를 단독으로 사용하는 경우도 많지만

자료구조 여러개를 조합하여 복합적으로 사용하는 경우도 많다.

항목이 리스트로 구성된 튜플이나, 값이 리스트인 딕셔너리 등이 그 예가 될 수 있다.

어떤식으로 복잡한 자료구조를 구성할 수 있는지 한번 알아보자.

 

1. 리스트의 리스트

먼저 리스트를 항목으로 가지는 리스트를 만들 수 있다.

항목에 접근할 때는 2차원 배열과 같이 두개의 인덱스를 이용해 접근 할 수 있다.

>>> a = [1,2]
>>> b = [3,4]
>>> c = [5,6]
>>> d = [a,b,c]
>>> d
[[1, 2], [3, 4], [5, 6]]           # 리스트를 항목으로 가진 리스트
>>> d[0][1]                        # d[0]으로 [1,2]리스트에 접근 후 [1]로 두번째 값인 2에 접근
2 
>>> d[0][1] = 'a'                  # 항목의 값 변경
>>> d
[[1, 'a'], [3, 4], [5, 6]]

 

2. 튜플의 리스트

튜플을 항목으로 가지는 리스트도 만들 수 있다.

튜플은 불변하기 때문에 튜플에 들어있는 항목을 수정할 수는 없다.

>>> a = (1,2)
>>> b = (3,4)
>>> c = (5,6)
>>> d = [a,b,c]
>>> d
[(1, 2), (3, 4), (5, 6)]           # 튜플을 항목으로 가지는 리스트 생성
>>> d[0][1]                        # 리스트 안의 튜플에 항목에 접근
2
>>> d[0][1] = 'a'                  # 튜플의 내용을 변경하려고 시도하면 에러 발생
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment 

 

3. 리스트를 값으로 가진 딕셔너리

딕셔너리의 값을 리스트로 구성할 수 있다.

>>> a = [1,2]
>>> b = [3,4]
>>> c = [5,6]
>>> d_dict = {'a':a,'b':b,'c':c}
>>> d_dict
{'a': [1, 2], 'b': [3, 4], 'c': [5, 6]}     # 값을 리스트로 구성한 딕셔너리
>>> d_dict['c'][0]                          # 딕셔너리의 'c'값인 리스트 변경
5
>>> d_dict['c'][0] = 100
>>> d_dict
{'a': [1, 2], 'b': [3, 4], 'c': [100, 6]} 

 

4. 튜플이 키인 딕셔너리

튜플은 불변하기 때문에 딕셔너리의 키로 사용할 수 있다.

리스트는 값이 변할 수 있기때문에 딕셔너리의 키로 사용할 수 없다.

 >>> type(a)
<class 'list'>
>>> d_dict = {a:300,b:500,c:700}
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'         # 리스트는 키로 사용할 수 없다.


>>> e = (1,2)
>>> f = (3,4)
>>> g = (5,6)
>>> d_dict = {e:300,f:500,g:700}
>>> d_dict
{(1, 2): 300, (3, 4): 500, (5, 6): 700}    # 튜플은 불변하기 때문에 키로 사용 가능

 

이 이외에도 얼마든지 복잡한 자료구조를 구성해서 사용할 수 있다.

>>> d_dict[(1,2)] = [a,b,[3,4,5]]
>>> d_dict                        # 튜플을 키로, 값을 리스트의 리스트로 구성한 복합자료구조
{(1, 2): [[1, 2], [3, 4], [3, 4, 5]], (3, 4): 500, (5, 6): 700} 

 

반응형