|
| 1 | +--- |
| 2 | +title: "리스트, 딕셔너리" |
| 3 | +--- |
| 4 | + |
| 5 | +[:material-arrow-left-bold: 글 목록](../index.md){ .md-button } |
| 6 | + |
| 7 | +페이지 제목을 `리스트, 딕셔너리` 라고 지었지만, 이는 파이썬 용어고 실제로는 여러 값들을 담아놓을 수 있는 자료구조에 대해 다룰 것이다. 자료구조 안에 들어있는 값들은 순서(인덱스) 혹은 이름(키)을 통해 접근 가능하고, 자료구조에 새로운 값을 추가하거나 안에 들어있는 값을 제거하는 것이 가능하다. |
| 8 | + |
| 9 | +이 페이지에서는 되도록이면 간단한 개념 및 사용법만 설명하고 넘어갈 것이다. 즉, 구체적인 내부 구현이나 성능에 관한 이야기는 하지 않는다. |
| 10 | + |
| 11 | +## 순서를 통해 접근할 수 있는 자료구조 |
| 12 | + |
| 13 | +순서를 통해 접근할 수 있는 자료구조는 일반적으로 다음의 특징을 가지고 있다. |
| 14 | + |
| 15 | +- [a, b, c, d] 꼴로 표기한다. |
| 16 | + - a, b, c, d는 각각 아이템이라고 한다. |
| 17 | + - 아이템들은 타입이 같을 수도, 아닐 수도 있다. 이는 언어마다 조금씩 다르므로 이후에 더 설명한다. |
| 18 | + - 안에 있는 총 아이템의 개수를 확인할 수 있다. |
| 19 | + - 위의 예시에서는 아이템이 총 4개 들어있다. |
| 20 | +- 아이템들에는 순서가 있다. |
| 21 | + - 제일 왼쪽에 있는 아이템이 가장 앞에 있는 아이템이다. |
| 22 | + - 순서(혹은, 인덱스)가 0부터 시작한다. |
| 23 | + - 즉, 첫 번째 아이템이 0번, 두 번째 아이템이 1번, ... 순서로 번호가 매겨져있다. |
| 24 | +- 특정한 인덱스에 있는 아이템에 접근할 수 있다. |
| 25 | + - 예를 들어, 리스트 안에 5개의 아이템이 있다면 인덱스 0번에 있는 아이템에 접근할 경우 맨 앞에 있는 아이템의 값을 받아올 수 있다. |
| 26 | + - 특정 인덱스에 있는 아이템을 수정하는 것도 가능하다. |
| 27 | +- 특정한 인덱스에 새로운 아이템을 더할 수 있다. |
| 28 | + - 이 경우 기존에 해당 인덱스에 있는 아이템들부터 뒤로 밀린다. |
| 29 | + - [0, 1, 2, 3, 4]에서 2번 인덱스에 새로운 아이템 9를 넣으면 [0, 1, 9, 2, 3, 4]가 된다. |
| 30 | +- 특정한 인덱스에 있는 아이템을 제거할 수 있다. |
| 31 | + - 이 경우 기존에 해당 인덱스 뒤에 있는 아이템들부터 앞으로 당겨진다. |
| 32 | + - [0, 1, 2, 3, 4]에서 2번 인덱스에 있는 아이템을 제거하면 [0, 1, 3, 4]가 된다. |
| 33 | + |
| 34 | +=== "python" |
| 35 | + |
| 36 | + ``` python |
| 37 | + # 파이썬에는 list(리스트)를 통해 위의 자료구조가 구현되어 있다. |
| 38 | + |
| 39 | + # 지금까지는 변수 이름을 알파벳 하나로 썼는데, 실제 개발할 때는 변수가 어떤 값을 |
| 40 | + # 담고있는지 더 쉽게 파악하기 위해서 변수명을 더 길고 자세하게 쓴다. |
| 41 | + # 파이썬에서는 변수명을 지을때 언더바(_)로 구분된 단어들을 사용하는데, 이를 |
| 42 | + # snake case라고 한다. camel case, kebab case, pascal case등 다른 종류의 case도 |
| 43 | + # 있는데, 자세한 내용은 검색해보길 바란다. |
| 44 | + |
| 45 | + # 아래와 같이 리스트를 생성한다. |
| 46 | + number_list = [1, 2, 3, 4, 5] |
| 47 | + |
| 48 | + # 리스트의 길이가 곧 리스트에 들어있는 아이템 개수다. |
| 49 | + list_length = len(number_list) # 5 |
| 50 | + |
| 51 | + # 아래와 같이 리스트의 특정 인덱스에 접근한다. |
| 52 | + n = number_list[0] # 0번째 인덱스에는 1이 들어있다. |
| 53 | + n = number_list[3] # 3번째 인덱스에는 4가 들어있다. |
| 54 | + n = number_list[-1] # 파이썬에서는 뒤에서부터 인덱스를 접근할 수도 있다. n은 5다. |
| 55 | + n = number_list[-2] # 뒤에서 두 번째 아이템은 4다. |
| 56 | + |
| 57 | + # 마지막 인덱스는 4다. 즉, 인덱스 5에 해당하는 아이템은 존재하지 않는다. |
| 58 | + #n = number_list[5] # list index out of range 에러가 발생한다. |
| 59 | + |
| 60 | + # 특정 인덱스에 있는 값을 바꿀 수도 있다. |
| 61 | + number_list[0] = 8 # number_list가 [8, 2, 3, 4, 5]가 된다. |
| 62 | + |
| 63 | + # 리스트의 끝에 새로운 아이템을 더할 수 있다. |
| 64 | + number_list.append(123) # number_list가 [8, 2, 3, 4, 5, 123]이 된다. |
| 65 | + |
| 66 | + # 리스트의 끝에 있는 아이템을 제거할 수 있다. |
| 67 | + val = number_list.pop() # val에는 제거한 값이 들어간다. |
| 68 | + # 여기서 val은 123, number_list는 [8, 2, 3, 4, 5]다. |
| 69 | + |
| 70 | + # 리스트의 특정 인덱스 새로운 아이템을 더할 수 있다. |
| 71 | + number_list.insert(2, 123) # 인덱스 2에 해당하는 위치에 123을 추가한다. |
| 72 | + # 여기서 number_list는 [8, 2, 123, 3, 4, 5]다. |
| 73 | + number_list.insert(999, 123) # 인덱스 999에 해당하는 위치에 123을 추가한다. |
| 74 | + # 인덱스 999에 해당하는 자리가 없지만, 조용히 끝에 더해준다. |
| 75 | + # 여기서 number_list는 [8, 2, 123, 3, 4, 5, 123]이다. |
| 76 | + |
| 77 | + # 리스트의 특정 인덱스의 아이템을 제거할 수 있다. |
| 78 | + del number_list[3] # 인덱스 3에 해당하는 위치에 있는 아이템을 제거한다. |
| 79 | + # 여기서 number_list는 [8, 2, 123, 4, 5, 123]이다. |
| 80 | + del number_list[-2] # 인덱스 -2, 즉, 뒤에서 두 번재 있는 아이템을 제거한다. |
| 81 | + # 여기서 number_list는 [8, 2, 123, 4, 123]이다. |
| 82 | + |
| 83 | + # 리스트에 있는 특정 아이템을 찾아서 제거할 수도 있다. |
| 84 | + number_list.remove(2) # 리스트에서 2를 찾아서 제거한다. |
| 85 | + # 여기서 number_list는 [8, 123, 4, 123]이다. |
| 86 | + number_list.remove(123) # 리스트에서 123을 찾아서 제거한다. |
| 87 | + # 이때, 앞에 있는 아이템을 먼저 찾아서 제거한다. |
| 88 | + # 여기서 number_list는 [8, 4, 123]이다. |
| 89 | + number_list.remove(123) |
| 90 | + # 여기서 number_list는 [8, 4]다. |
| 91 | + number_list.remove(123) # 없는 값을 제거하려고 시도하면 에러가 발생한다. |
| 92 | + ``` |
| 93 | + |
| 94 | +=== "javascript" |
| 95 | + |
| 96 | + ``` js |
| 97 | + // WIP |
| 98 | + ``` |
| 99 | + |
| 100 | +=== "C#" |
| 101 | + |
| 102 | + ``` cs |
| 103 | + // WIP |
| 104 | + ``` |
| 105 | + |
| 106 | +=== "C++" |
| 107 | + |
| 108 | + ``` cpp |
| 109 | + // WIP |
| 110 | + ``` |
| 111 | + |
| 112 | +## 이름을 통해 접근할 수 있는 자료구조 |
| 113 | + |
| 114 | +이름을 통해 접근할 수 있는 자료구조는 일반적으로 다음의 특징을 가지고 있다. |
| 115 | + |
| 116 | +- {x: a, y: b, z: c} 꼴로 표기한다. |
| 117 | + - x, y, z를 키(key), a, b, c를 값(value)이라고 하고, (x, a)를 키-값 쌍(key-value pair)이라고 한다. |
| 118 | + - 키는 보통 string, 혹은 int타입의 값을 사용한다. |
| 119 | + - 꼭 그래야 하는 것은 아니지만, 많은 경우 이렇게 사용할 것이다. |
| 120 | + - 자세한 설명은 이후 관련 내용을 다뤄야 할때 설명하도록 하겠다. |
| 121 | +- 특정한 키를 통해 값에 접근할 수 있다. |
| 122 | + - 위의 예시에서는 x를 통해 a에 접근할 수 있다. |
| 123 | + - 그렇기 때문에 키값은 중복될 수 없다. |
| 124 | + - 즉, {x: a, x: b} 같이 x라는 키가 두 번 사용될 수 없다. |
| 125 | + - 키를 통해 접근한 값을 수정할 수 있다. |
| 126 | +- 새로운 키와 값을 할당할 수 있다. |
| 127 | +- 키값을 통해 키-값 쌍을 제거할 수 있다. |
| 128 | + |
| 129 | +=== "python" |
| 130 | + |
| 131 | + ``` python |
| 132 | + # 파이썬에는 dictionary(딕셔너리, 줄여서 dict)를 통해 위의 자료구조가 구현되어 있다. |
| 133 | + |
| 134 | + # 아래와 같이 딕셔너리를 생성한다. |
| 135 | + sample_dict = {'a': 123, 10: [1, 2, 3]} |
| 136 | + |
| 137 | + # 키를 통해 값에 접근이 가능하다. |
| 138 | + x = sample_dict['a'] # x에 123이 들어간다. |
| 139 | + x = sample_dict[10] # x에 [1, 2, 3]이 들어간다. |
| 140 | + |
| 141 | + # 키를 통해 접근한 값을 변경할 수 있다. |
| 142 | + sample_dict['a'] += 10 # 값에 접근해서 값을 수정했다. |
| 143 | + # 여기서 sample_dict는 {'a': 133, 10: [1, 2, 3]}이 된다. |
| 144 | + sample_dict[10] = 42 # 특정 키에 들어있는 값을 덮어썼다. |
| 145 | + # 여기서 sample_dict는 {'a': 133, 10: 42}가 된다. |
| 146 | + |
| 147 | + # 새로운 키-값 쌍을 추가할 수 있다. |
| 148 | + sample_dict['x'] = 123 # 'x'라는 키에 123이라는 값을 할당했다. |
| 149 | + # 여기서 sample_dict는 {'a': 133, 10: 42, 'x': 123}이 된다. |
| 150 | + # 123이라는 값이 두 번 들어갔다. 값은 중복이 되어도 상관 없다. |
| 151 | + |
| 152 | + # 키를 통해 키-값 쌍을 제거할 수 있다. |
| 153 | + del sample_dict['a'] # 'a'라는 키와 이에 할당된 값을 제거했다. |
| 154 | + # 여기서 sample_dict는 {'a': 133, 10: 42, 'x': 123}이 된다. |
| 155 | + ``` |
| 156 | + |
| 157 | +=== "javascript" |
| 158 | + |
| 159 | + ``` js |
| 160 | + // WIP |
| 161 | + ``` |
| 162 | + |
| 163 | +=== "C#" |
| 164 | + |
| 165 | + ``` cs |
| 166 | + // WIP |
| 167 | + ``` |
| 168 | + |
| 169 | +=== "C++" |
| 170 | + |
| 171 | + ``` cpp |
| 172 | + // WIP |
| 173 | + ``` |
| 174 | + |
| 175 | +[:material-arrow-left-bold: 글 목록](../index.md){ .md-button } |
0 commit comments