Skip to content

Commit b4b0e7d

Browse files
committed
Added more instructive examples of list comprehensions.
1 parent b66df15 commit b4b0e7d

File tree

3 files changed

+175
-0
lines changed

3 files changed

+175
-0
lines changed

Matrices.py

100644100755
File mode changed.

index.html

+87
Original file line numberDiff line numberDiff line change
@@ -12014,6 +12014,93 @@ <h4 id="&#1040;&#1073;&#1089;&#1090;&#1088;&#1072;&#1082;&#1094;&#1080;&#1080;-&
1201412014

1201512015
</div>
1201612016
</div>
12017+
</div></section><section>
12018+
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
12019+
</div>
12020+
<div class="inner_cell">
12021+
<div class="text_cell_render border-box-sizing rendered_html">
12022+
<h5 id="&#1053;&#1072;&#1075;&#1083;&#1103;&#1076;&#1085;&#1086;&#1077;-&#171;&#1088;&#1072;&#1079;&#1074;&#1086;&#1088;&#1072;&#1095;&#1080;&#1074;&#1072;&#1085;&#1080;&#1077;&#187;-&#1072;&#1073;&#1089;&#1090;&#1088;&#1072;&#1082;&#1094;&#1080;&#1080;-&#1089;&#1087;&#1080;&#1089;&#1082;&#1086;&#1074;">&#1053;&#1072;&#1075;&#1083;&#1103;&#1076;&#1085;&#1086;&#1077; &#171;&#1088;&#1072;&#1079;&#1074;&#1086;&#1088;&#1072;&#1095;&#1080;&#1074;&#1072;&#1085;&#1080;&#1077;&#187; &#1072;&#1073;&#1089;&#1090;&#1088;&#1072;&#1082;&#1094;&#1080;&#1080; &#1089;&#1087;&#1080;&#1089;&#1082;&#1086;&#1074;<a class="anchor-link" href="#&#1053;&#1072;&#1075;&#1083;&#1103;&#1076;&#1085;&#1086;&#1077;-&#171;&#1088;&#1072;&#1079;&#1074;&#1086;&#1088;&#1072;&#1095;&#1080;&#1074;&#1072;&#1085;&#1080;&#1077;&#187;-&#1072;&#1073;&#1089;&#1090;&#1088;&#1072;&#1082;&#1094;&#1080;&#1080;-&#1089;&#1087;&#1080;&#1089;&#1082;&#1086;&#1074;">&#182;</a></h5><p>Разобранная выше сокращённая запись <code>l1 = [f1(e) if cond(e) else f2(e) for e in iterable]</code> будет эквивалентна следующему коду.</p>
12023+
<div class="highlight"><pre><span></span><span class="n">l1</span> <span class="o">=</span> <span class="p">[]</span>
12024+
<span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">iterable</span><span class="p">:</span>
12025+
<span class="k">if</span> <span class="n">cond</span><span class="p">(</span><span class="n">e</span><span class="p">):</span>
12026+
<span class="n">l1</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">f1</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
12027+
<span class="k">else</span><span class="p">:</span>
12028+
<span class="n">l1</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">f2</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
12029+
</pre></div>
12030+
12031+
</div>
12032+
</div>
12033+
</div></section><section>
12034+
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
12035+
</div>
12036+
<div class="inner_cell">
12037+
<div class="text_cell_render border-box-sizing rendered_html">
12038+
<h5 id="&#1041;&#1086;&#1083;&#1077;&#1077;-&#1089;&#1083;&#1086;&#1078;&#1085;&#1099;&#1081;-&#1087;&#1088;&#1080;&#1084;&#1077;&#1088;">&#1041;&#1086;&#1083;&#1077;&#1077; &#1089;&#1083;&#1086;&#1078;&#1085;&#1099;&#1081; &#1087;&#1088;&#1080;&#1084;&#1077;&#1088;<a class="anchor-link" href="#&#1041;&#1086;&#1083;&#1077;&#1077;-&#1089;&#1083;&#1086;&#1078;&#1085;&#1099;&#1081;-&#1087;&#1088;&#1080;&#1084;&#1077;&#1088;">&#182;</a></h5><p>Списковое включение:</p>
12039+
<div class="highlight"><pre><span></span><span class="n">dimensions</span> <span class="o">=</span> <span class="p">(</span><span class="mi">7</span><span class="p">,</span> <span class="mi">6</span><span class="p">);</span> <span class="n">d</span> <span class="o">=</span> <span class="n">dimensions</span>
12040+
<span class="n">s</span> <span class="o">=</span> <span class="s2">&quot;111000101000111000100101100010100010000100&quot;</span>
12041+
<span class="n">l1</span> <span class="o">=</span> <span class="p">[[</span><span class="n">s</span><span class="p">[</span><span class="n">r</span> <span class="o">*</span> <span class="n">d</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">c</span><span class="p">]</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="mi">1</span><span class="p">])]</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="mi">0</span><span class="p">])]</span>
12042+
<span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">l1</span><span class="p">:</span>
12043+
<span class="k">print</span><span class="p">(</span><span class="o">*</span><span class="n">r</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
12044+
</pre></div>
12045+
<p>Развёрнутый вариант:</p>
12046+
<div class="highlight"><pre><span></span><span class="n">dimensions</span> <span class="o">=</span> <span class="p">(</span><span class="mi">7</span><span class="p">,</span> <span class="mi">6</span><span class="p">);</span> <span class="n">d</span> <span class="o">=</span> <span class="n">dimensions</span>
12047+
<span class="n">s</span> <span class="o">=</span> <span class="s2">&quot;111000101000111000100101100010100010000100&quot;</span>
12048+
<span class="n">l1</span> <span class="o">=</span> <span class="p">[]</span>
12049+
<span class="p">[</span><span class="n">s</span><span class="p">[</span><span class="n">r</span> <span class="o">*</span> <span class="n">d</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">c</span><span class="p">]</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="mi">1</span><span class="p">])]</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
12050+
<span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="mi">0</span><span class="p">]):</span>
12051+
<span class="n">l1</span><span class="o">.</span><span class="n">append</span><span class="p">([])</span>
12052+
<span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="mi">1</span><span class="p">]):</span>
12053+
<span class="n">l1</span><span class="p">[</span><span class="n">r</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">s</span><span class="p">[</span><span class="n">r</span> <span class="o">*</span> <span class="n">d</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">c</span><span class="p">])</span>
12054+
<span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">l1</span><span class="p">:</span>
12055+
<span class="k">print</span><span class="p">(</span><span class="o">*</span><span class="n">r</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
12056+
</pre></div>
12057+
12058+
</div>
12059+
</div>
12060+
</div></section><section>
12061+
<div class="cell border-box-sizing code_cell rendered">
12062+
<div class="input">
12063+
<div class="prompt input_prompt">In&nbsp;[2]:</div>
12064+
<div class="inner_cell">
12065+
<div class="input_area">
12066+
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">dimensions</span> <span class="o">=</span> <span class="p">(</span><span class="mi">7</span><span class="p">,</span> <span class="mi">6</span><span class="p">);</span> <span class="n">d</span> <span class="o">=</span> <span class="n">dimensions</span>
12067+
<span class="n">s</span> <span class="o">=</span> <span class="s2">&quot;111000101000111000100101100010100010000100&quot;</span>
12068+
<span class="n">l1</span> <span class="o">=</span> <span class="p">[[</span><span class="s2">&quot;#&quot;</span> <span class="k">if</span> <span class="n">s</span><span class="p">[</span><span class="n">r</span> <span class="o">*</span> <span class="n">d</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">c</span><span class="p">]</span> <span class="o">==</span> <span class="s2">&quot;1&quot;</span>
12069+
<span class="k">else</span> <span class="s2">&quot; &quot;</span>
12070+
<span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="mi">1</span><span class="p">])]</span>
12071+
<span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="mi">0</span><span class="p">])]</span>
12072+
<span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">l1</span><span class="p">:</span>
12073+
<span class="nb">print</span><span class="p">(</span><span class="o">*</span><span class="n">r</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
12074+
</pre></div>
12075+
12076+
</div>
12077+
</div>
12078+
</div>
12079+
12080+
<div class="output_wrapper">
12081+
<div class="output">
12082+
12083+
12084+
<div class="output_area">
12085+
12086+
<div class="prompt"></div>
12087+
12088+
12089+
<div class="output_subarea output_stream output_stdout output_text">
12090+
<pre>###
12091+
# #
12092+
###
12093+
# # #
12094+
# #
12095+
# #
12096+
#
12097+
</pre>
12098+
</div>
12099+
</div>
12100+
12101+
</div>
12102+
</div>
12103+
1201712104
</div></section></section><section><section>
1201812105
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
1201912106
</div>

index.ipynb

+88
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,94 @@
151151
"```\n"
152152
]
153153
},
154+
{
155+
"cell_type": "markdown",
156+
"metadata": {
157+
"slideshow": {
158+
"slide_type": "subslide"
159+
}
160+
},
161+
"source": [
162+
"##### Наглядное «разворачивание» абстракции списков\n",
163+
"\n",
164+
"Разобранная выше сокращённая запись ```l1 = [f1(e) if cond(e) else f2(e) for e in iterable]``` будет эквивалентна следующему коду.\n",
165+
"\n",
166+
" ```python \n",
167+
"l1 = []\n",
168+
"for e in iterable:\n",
169+
" if cond(e):\n",
170+
" l1.append(f1(e))\n",
171+
" else:\n",
172+
" l1.append(f2(e))\n",
173+
"```"
174+
]
175+
},
176+
{
177+
"cell_type": "markdown",
178+
"metadata": {
179+
"slideshow": {
180+
"slide_type": "subslide"
181+
}
182+
},
183+
"source": [
184+
"##### Более сложный пример\n",
185+
"Списковое включение:\n",
186+
" ```python \n",
187+
"dimensions = (7, 6); d = dimensions\n",
188+
"s = \"111000101000111000100101100010100010000100\"\n",
189+
"l1 = [[s[r * d[1] + c] for c in range(d[1])] for r in range(d[0])]\n",
190+
"for r in l1:\n",
191+
" print(*r, sep=\"\")\n",
192+
"```\n",
193+
"Развёрнутый вариант:\n",
194+
" ```python \n",
195+
"dimensions = (7, 6); d = dimensions\n",
196+
"s = \"111000101000111000100101100010100010000100\"\n",
197+
"l1 = []\n",
198+
"[s[r * d[1] + c] for c in range(d[1])] for r in range(d[0])\n",
199+
"for r in range(d[0]):\n",
200+
" l1.append([])\n",
201+
" for c in range(d[1]):\n",
202+
" l1[r].append(s[r * d[1] + c])\n",
203+
"for r in l1:\n",
204+
" print(*r, sep=\"\")\n",
205+
"```"
206+
]
207+
},
208+
{
209+
"cell_type": "code",
210+
"execution_count": 2,
211+
"metadata": {
212+
"slideshow": {
213+
"slide_type": "subslide"
214+
}
215+
},
216+
"outputs": [
217+
{
218+
"name": "stdout",
219+
"output_type": "stream",
220+
"text": [
221+
"### \n",
222+
"# # \n",
223+
"### \n",
224+
"# # #\n",
225+
"# # \n",
226+
"# # \n",
227+
" # \n"
228+
]
229+
}
230+
],
231+
"source": [
232+
"dimensions = (7, 6); d = dimensions\n",
233+
"s = \"111000101000111000100101100010100010000100\"\n",
234+
"l1 = [[\"#\" if s[r * d[1] + c] == \"1\"\n",
235+
" else \" \"\n",
236+
" for c in range(d[1])] \n",
237+
" for r in range(d[0])]\n",
238+
"for r in l1:\n",
239+
" print(*r, sep=\"\")"
240+
]
241+
},
154242
{
155243
"cell_type": "markdown",
156244
"metadata": {

0 commit comments

Comments
 (0)