지금까지 리스트, 튜플, 딕셔너리, 셋과 같은 파이썬에서 기본적으로 제공하는 자료구조에 대해 알아보았다.
프로그래밍을 할 때 자료구조를 단독으로 사용하는 경우도 많지만
자료구조 여러개를 조합하여 복합적으로 사용하는 경우도 많다.
항목이 리스트로 구성된 튜플이나, 값이 리스트인 딕셔너리 등이 그 예가 될 수 있다.
어떤식으로 복잡한 자료구조를 구성할 수 있는지 한번 알아보자.
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} |
반응형
'IT' 카테고리의 다른 글
[파이썬 기초] 여러줄에 걸쳐 입력 - \ (백슬래쉬) (0) | 2018.12.13 |
---|---|
[파이썬 기초] 주석달기 - # (샵) (0) | 2018.12.13 |
[파이썬 기초] 자료구조(4) - 셋(set) (0) | 2018.12.10 |
[파이썬 기초] 자료구조(3) - 딕셔너리 (0) | 2018.12.05 |
[파이썬 기초] 자료구조(2) - 튜플 (0) | 2018.12.04 |