Skip to content

Commit 271a62a

Browse files
committed
Unpacking part
1 parent 2a980d7 commit 271a62a

File tree

1 file changed

+189
-0
lines changed

1 file changed

+189
-0
lines changed
Lines changed: 189 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,189 @@
1+
{
2+
"metadata": {
3+
"language_info": {
4+
"codemirror_mode": {
5+
"name": "ipython",
6+
"version": 3
7+
},
8+
"file_extension": ".py",
9+
"mimetype": "text/x-python",
10+
"name": "python",
11+
"nbconvert_exporter": "python",
12+
"pygments_lexer": "ipython3",
13+
"version": "3.6.9-final"
14+
},
15+
"orig_nbformat": 2,
16+
"kernelspec": {
17+
"name": "python3",
18+
"display_name": "Python 3",
19+
"language": "python"
20+
}
21+
},
22+
"nbformat": 4,
23+
"nbformat_minor": 2,
24+
"cells": [
25+
{
26+
"source": [
27+
"Pythonic Code For Coding Test\n",
28+
"=============================\n",
29+
"Python은 다른 C-Sytle의 언어 (C, C++, JAVA, ...) 와 다른 특별한 문법들이 많습니다.\n",
30+
"\n",
31+
"다만 코딩테스트를 위해 Python을 사용하거나, 기본적인 문법만 공부하고 사용하시는 분들은 Python만의 특유의 문법 (Pythonic 한 코드라고도 합니다.)을 잘 활용하지 못하는 경우가 많습니다.\n",
32+
"\n",
33+
"이 자료는 다음과 같은 분들에게 추천합니다.\n",
34+
"- 파이썬 문법을 알고 있지만 Pythonic한 코드를 작성하는데 어려움을 겪는 분들\n",
35+
"- C-Style 언어를 사용하다 코딩 테스트를 위해 Python을 사용하시는 분들\n",
36+
"\n",
37+
"꼭 모든 내용을 기억할 필요는 없고, 간단하게 30분 정도 시간을 잡고 읽어보시면서 \"이런 문법도 있구나!\"하고 이해하고 넘어가면 좋을 것 같습니다.\n",
38+
"\n",
39+
"목차 (예정)\n",
40+
"-----------\n",
41+
"내용이 확정되는 대로 작성하겠습니다."
42+
],
43+
"cell_type": "markdown",
44+
"metadata": {}
45+
},
46+
{
47+
"source": [
48+
"## Unpacking\n",
49+
"파이썬으로 알고리즘 문제를 좀 풀다보면 이 문법은 친숙할겁니다."
50+
],
51+
"cell_type": "markdown",
52+
"metadata": {}
53+
},
54+
{
55+
"cell_type": "code",
56+
"execution_count": null,
57+
"metadata": {},
58+
"outputs": [],
59+
"source": [
60+
"a, b = map(int, input().split())"
61+
]
62+
},
63+
{
64+
"source": [
65+
"이것은 iterable (모든 반복 가능한 객체를 iterable 하다고 합니다! 리스트, 튜플, 문자열 등등...) 한 데이터엔 모두 가능한 문법입니다.\n",
66+
"\n",
67+
"그런데 이런 상황이 있을 겁니다.\n",
68+
"\n",
69+
"> 입력 받은 list에서 첫번째, 마지막 값만 얻고 싶어!\n",
70+
"\n",
71+
"또는\n",
72+
"\n",
73+
"> 입력 받은 list에서 첫번째, 마지막 값을 제외하고 싶어!\n",
74+
"\n",
75+
"이런 경우는 어떻게 해야 할까요?\n"
76+
],
77+
"cell_type": "markdown",
78+
"metadata": {}
79+
},
80+
{
81+
"source": [
82+
"_list = [1, 2, 3, 4, 5]\n",
83+
"first_index, *rest, last_index = _list\n",
84+
"print(rest)\n"
85+
],
86+
"cell_type": "code",
87+
"metadata": {},
88+
"execution_count": 1,
89+
"outputs": [
90+
{
91+
"output_type": "stream",
92+
"name": "stdout",
93+
"text": [
94+
"[2, 3, 4]\n"
95+
]
96+
}
97+
]
98+
},
99+
{
100+
"source": [
101+
"간단하네요?\n",
102+
"파이썬은 *(asterisk)를 다음과 같은 상황에 사용합니다.\n",
103+
"\n",
104+
"- 곱셈, 거듭제곱\n",
105+
"- List형 컨테이너를 반복해서 확장\n",
106+
"- 가변 인자\n",
107+
"- Unpacking\n",
108+
"\n",
109+
"위에서 rest에 사용한 것은 가변인자 입니다. 즉, 인자의 갯수가 몇개가 될지 확실하지 않을때 사용하는 거죠.\n",
110+
"first_index와 last_index가 앞과 끝을 가져가면, rest가 나머지를 가져가는 겁니다.\n",
111+
"\n",
112+
"그렇다면 Unpacking은 뭘까요?\n",
113+
"일단 아래 예시를 보겠습니다."
114+
],
115+
"cell_type": "markdown",
116+
"metadata": {}
117+
},
118+
{
119+
"cell_type": "code",
120+
"execution_count": 7,
121+
"metadata": {},
122+
"outputs": [],
123+
"source": [
124+
"_list = [1, 2, 3, 4, 5]\n",
125+
"for num in _list:\n",
126+
" print(num, end = ' ')"
127+
]
128+
},
129+
{
130+
"source": [
131+
"_list내 원소들을 출력하는 평범한 코드입니다.\n",
132+
"그렇다면 이건 어떨까요?"
133+
],
134+
"cell_type": "markdown",
135+
"metadata": {}
136+
},
137+
{
138+
"cell_type": "code",
139+
"execution_count": null,
140+
"metadata": {},
141+
"outputs": [],
142+
"source": [
143+
"_list = [1, 2, 3, 4, 5]\n",
144+
"print(*_list)"
145+
]
146+
},
147+
{
148+
"source": [
149+
"놀랍게도 동일한 결과를 얻을 수 있습니다. 이것을 **List Unpacking** 이라고 부릅니다.\n",
150+
"\n",
151+
"사실 list뿐만이 아니라, 컨테이너형 구조에선 모두 적용할 수 있습니다. 튜플에서도 되고, set에서도 가능해요.\n",
152+
"\n",
153+
"Unpacking을 이야기 했으니 살짝 다른 이야기를 해보겠습니다. 이건 어떤가요?"
154+
],
155+
"cell_type": "markdown",
156+
"metadata": {}
157+
},
158+
{
159+
"cell_type": "code",
160+
"execution_count": 3,
161+
"metadata": {},
162+
"outputs": [
163+
{
164+
"output_type": "stream",
165+
"name": "stdout",
166+
"text": [
167+
"(1, 2, 3)\n"
168+
]
169+
}
170+
],
171+
"source": [
172+
"a, b, c = [1, 2, 3]\n",
173+
"d = a, b, c\n",
174+
"print(d)"
175+
]
176+
},
177+
{
178+
"source": [
179+
"Reference\n",
180+
"---------\n",
181+
"- 파이썬 언어 레퍼런스 [이동][https://docs.python.org/ko/3/reference/index.html]\n",
182+
"- 전문가를 위한 파이썬 (원제 Fluent Python) - 루시아누 하말류 [구매][https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=88728476]\n",
183+
"- Python Cookbook - 데이비드 비즐리, 브라이언 K. 존스 [구매][https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=35468006]"
184+
],
185+
"cell_type": "markdown",
186+
"metadata": {}
187+
}
188+
]
189+
}

0 commit comments

Comments
 (0)