You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
print(*[1if dt in _set else0for dt in _list], sep='\n')
99
120
```
121
+
100
122
어... 이해가 잘 가시나요? 가신다면 그냥 스크롤을 아래로 쭉~~ 내리시면 됩니다.
101
123
102
124
우선 List Comprehension은 다음과 같은 구조를 띄고 있습니다.
@@ -109,41 +131,253 @@ print(*[1 if dt in _set else 0 for dt in _list], sep = '\n')
109
131
해당 내용은 _set에 원소가 들어있으면 1, 아니면 0을 리턴하라는 말이네요? 휴! 드디어 해석했습니다.
110
132
111
133
물론 다차원 배열도 사용할 수 있습니다.
134
+
112
135
```python
113
136
square = [[x **2for x inrange(3)] for _ inrange(3)]
114
137
print(square) # [[1, 4, 9], [1, 4, 9], [1, 4, 9]]
115
138
```
139
+
116
140
코드의 길이를 확실히 줄일 수 있다는 장점이 있지만, 너무 길면 가독성도 해치고, 코드를 작성하는 본인도 "내가 뭘 하고 있지?" 라는 생각이 들 수 있습니다. 예를 들자면...
141
+
117
142
```python
118
143
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
119
144
print([[x for x in row if x %3==0] for row in matrix ifsum(row) >=10]) # [[6], [9]]
120
145
```
146
+
121
147
제발 이러진 마세요...
122
148
123
149
참고로, 리스트 뿐만이 아니라 tuple, set, dict도 만들 수 있습니다.
124
150
dict의 경우 뒷 부분에서 zip을 배우고 나면 정말 요긴하게 쓸 수 있습니다. (즉, 다음에 다룬다는 이야기입니다.) 사용법 자체는 List Comprehension과 유사합니다.
125
151
* * *
126
-
## Dictionary 잘 쓰기
152
+
153
+
Dictionary 잘 쓰기
154
+
------------------
155
+
156
+
파이썬을 교양수업으로 듣던, 책으로 조금만 공부하던, Dictionary와 Set에 대해서는 접해봤을 것 입니다.
157
+
158
+
다만 처음 배우는 입장에선 '굳이 이걸 사용해야 할까?' 라는 생각을 많이 하더라고요. 어디에 사용하면 좋은지, 그리고 어떻게 해야 잘 사용할 수 있을지 한 번 알아봅시다.
159
+
160
+
Dictionary와 Set은 *Hash Table* 구조를 띄고 있습니다. (해시에 대해 잘 모르신다면, [여기](https://github.com/VSFe/Algorithm_Study/blob/main/Concept/05_Heap_Hash/Ch.05_%ED%9E%99_%ED%95%B4%EC%8B%9C_Python.pdf)를 봅시다.) 그래서 삽입, 삭제, 탐색 연산의 시간복잡도는 O(1) 입니다.
161
+
162
+
초보자분들이 가장 많이 하는 실수가, **값을 찾기 위해 list에서 in을 사용한다는 것** 입니다. 아니 그게 뭐가 문제냐고요?
163
+
164
+
```python
165
+
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
166
+
for i inrange(100):
167
+
if i in data:
168
+
print(1)
169
+
```
170
+
171
+
해당 코드는 데이터를 순차적으로 탐색합니다. 그러니까 여기선 하나의 숫자를 찾기 위해 최대 10번 데이터를 확인해야 한다는 이야기겠죠.
172
+
173
+
뭐 데이터 양이 작다면 모르겠지만, 데이터양이 많으면 많아질수록 엄청나게 시간이 많이 소요됩니다. 당장 리스트에 100,000개의 원소가 있는데 20,000개의 랜덤 데이터가 여기 안에 있는지 찾는다고 생각해보세요.
174
+
175
+
이럴땐 set을 사용해야 합니다.
176
+
177
+
```python
178
+
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
179
+
_data_set =set(data)
180
+
181
+
for i inrange(100):
182
+
if i in data:
183
+
print(1)
184
+
```
185
+
186
+
실제로 몇 백만개의 데이터가 있는 set에 약 10만 번 정도의 in 연산을 시행해도 1초도 안 걸리는 시간에 완료하는데, list를 사용하게 되면 몇 시간 이상 걸릴 수 있습니다.
187
+
188
+
또한 set의 구조상, 같은 값이 들어올 수 없다는 것은 모두가 아실겁니다. 이걸 응용하면 다음과 같은 것도 가능합니다.
0 commit comments