-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathItertools.html
More file actions
376 lines (250 loc) · 25.7 KB
/
Itertools.html
File metadata and controls
376 lines (250 loc) · 25.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="zh-CN" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="zh-CN" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta content="Topic: simple use cases of python itertools, Difficulty: Easy, Category: Tutorial" name="description" />
<meta content="itertools, examples, zip, range, enumerate, chain, combinations" name="keywords" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Python的“Itertools” — Python Like You Mean It</title>
<script type="text/javascript" src="../_static/js/modernizr.min.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/language_data.js"></script>
<script src="https://www.googletagmanager.com/gtag/js?id=UA-115029372-1"></script>
<script src="../_static/gtag.js"></script>
<script src="../_static/translations.js"></script>
<script crossorigin="anonymous" integrity="sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=" src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js"></script>
<script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/x-mathjax-config">MathJax.Hub.Config({"tex2jax": {"inlineMath": [["$", "$"], ["\\(", "\\)"]], "processEscapes": true, "ignoreClass": "document", "processClass": "math|output_area"}})</script>
<script type="text/javascript" src="../_static/js/theme.js"></script>
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../_static/my_theme.css" type="text/css" />
<link rel="index" title="索引" href="../genindex.html" />
<link rel="search" title="搜索" href="../search.html" />
<link rel="next" title="函数基础" href="Functions.html" />
<link rel="prev" title="生成器和理解表达式" href="Generators_and_Comprehensions.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home"> Python Like You Mean It
</a>
<div class="version">
1.4
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<p class="caption"><span class="caption-text">目录:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../intro.html">Python Like You Mean It</a></li>
<li class="toctree-l1"><a class="reference internal" href="../module_1.html">模组1:Python入门</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="../module_2.html">模组2:Python基础</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="Basic_Objects.html">基本对象类型</a></li>
<li class="toctree-l2"><a class="reference internal" href="SequenceTypes.html">序列类型</a></li>
<li class="toctree-l2"><a class="reference internal" href="Variables_and_Assignment.html">变量和赋值</a></li>
<li class="toctree-l2"><a class="reference internal" href="Introduction.html">控制流简介</a></li>
<li class="toctree-l2"><a class="reference internal" href="ConditionalStatements.html">条件语</a></li>
<li class="toctree-l2"><a class="reference internal" href="ForLoops.html">For循环和While循环</a></li>
<li class="toctree-l2"><a class="reference internal" href="Iterables.html">可迭代物</a></li>
<li class="toctree-l2"><a class="reference internal" href="Generators_and_Comprehensions.html">生成器和理解表达式</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Python的“Itertools”</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#官方说明文档链接">官方说明文档链接</a></li>
<li class="toctree-l3"><a class="reference internal" href="#阅读理解答案">阅读理解答案</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="Functions.html">函数基础</a></li>
<li class="toctree-l2"><a class="reference internal" href="Scope.html">作用域</a></li>
<li class="toctree-l2"><a class="reference internal" href="DataStructures.html">数据结构(第一部分):简介</a></li>
<li class="toctree-l2"><a class="reference internal" href="DataStructures_II_Dictionaries.html">数据结构(第二部分):词典</a></li>
<li class="toctree-l2"><a class="reference internal" href="DataStructures_III_Sets_and_More.html">数据结构(第三部分):集和集合模组</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../module_2_problems.html">模组2:题目</a></li>
<li class="toctree-l1"><a class="reference internal" href="../module_3.html">模组3:NumPy基础</a></li>
<li class="toctree-l1"><a class="reference internal" href="../module_3_problems.html">模组3:题目</a></li>
<li class="toctree-l1"><a class="reference internal" href="../module_4.html">模组4:面向对象编程</a></li>
<li class="toctree-l1"><a class="reference internal" href="../module_5.html">模组5:琐碎话题</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">Python Like You Mean It</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html">Docs</a> »</li>
<li><a href="../module_2.html">模组2:Python基础</a> »</li>
<li>Python的“Itertools”</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/Module2_EssentialsOfPython/Itertools.md.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<style>
/* CSS overrides for sphinx_rtd_theme */
/* 24px margin */
.nbinput.nblast.container,
.nboutput.nblast.container {
margin-bottom: 19px; /* padding has already 5px */
}
/* ... except between code cells! */
.nblast.container + .nbinput.container {
margin-top: -19px;
}
.admonition > p:before {
margin-right: 4px; /* make room for the exclamation icon */
}
/* Fix math alignment, see https://github.com/rtfd/sphinx_rtd_theme/pull/686 */
.math {
text-align: unset;
}
</style>
<div class="section" id="Python的“Itertools”">
<h1>Python的“Itertools”<a class="headerlink" href="#Python的“Itertools”" title="永久链接至标题">¶</a></h1>
<p>Python的<a class="reference external" href="https://docs.python.org/3/library/itertools.html">itertools模组</a>提供了一套快速的高效使用内存的创建迭代器的核心工具。我会将在本节快速地展示一些itertool的工具。大部分这些函数都会创建<a class="reference external" href="https://cn.pythonlikeyoumeanit.com/Module2_EssentialsOfPython/Generators_and_Comprehensions.html">生成器</a>,因此我们将会需要迭代这些生成器才能展示它们的使用方法。此模组极其有用——本文强烈建议你花一些时间去了解该模组的内容。</p>
<p>Python有三个属于itertools的内置函数 <code class="docutils literal notranslate"><span class="pre">range</span></code>,<code class="docutils literal notranslate"><span class="pre">enumerate</span></code>,<code class="docutils literal notranslate"><span class="pre">zip</span></code>,但因为它们极其有用,所以Python允许你在不导入它们的情况下直接就可以使用这些函数。熟练使用 <code class="docutils literal notranslate"><span class="pre">range</span></code>,<code class="docutils literal notranslate"><span class="pre">enumerate</span></code>,和 <code class="docutils literal notranslate"><span class="pre">zip</span></code> 是很重要的技能。</p>
<p><strong>range</strong></p>
<p>生成包含描述的“界限”(range)中的整数列表:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># 将会生成 0.. 1.. 2.. ... 8.. 9</span>
<span class="o">>>></span> <span class="nb">range</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span>
<span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span>
<span class="o">>>></span> <span class="nb">list</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="mi">10</span><span class="p">))</span>
<span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">9</span><span class="p">]</span>
<span class="c1"># 将会生成 0.. 3.. 6.. 9</span>
<span class="o">>>></span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
<span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
<span class="o">>>></span> <span class="nb">list</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">3</span><span class="p">))</span>
<span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">9</span><span class="p">]</span>
</pre></div>
</div>
<p><strong>enumerate</strong></p>
<p>枚举可迭代物中的对象:每轮迭代提供一元组,其内容为迭代轮数(从0开始)以及对应的可迭代物成员。</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># 将会生成 (0, 'apple').. (1, 'banana').. (2, 'cat').. (3, 'dog')]</span>
<span class="o">>>></span> <span class="nb">enumerate</span><span class="p">([</span><span class="s2">"apple"</span><span class="p">,</span> <span class="s2">"banana"</span><span class="p">,</span> <span class="s2">"cat"</span><span class="p">,</span> <span class="s2">"dog"</span><span class="p">])</span>
<span class="o"><</span><span class="nb">enumerate</span> <span class="n">at</span> <span class="mh">0x23e3557b3f0</span><span class="o">></span>
<span class="o">>>></span> <span class="nb">list</span><span class="p">(</span><span class="nb">enumerate</span><span class="p">([</span><span class="s2">"apple"</span><span class="p">,</span> <span class="s2">"banana"</span><span class="p">,</span> <span class="s2">"cat"</span><span class="p">,</span> <span class="s2">"dog"</span><span class="p">]))</span>
<span class="p">[(</span><span class="mi">0</span><span class="p">,</span> <span class="s1">'apple'</span><span class="p">),</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="s1">'banana'</span><span class="p">),</span> <span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="s1">'cat'</span><span class="p">),</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="s1">'dog'</span><span class="p">)]</span>
</pre></div>
</div>
<p><strong>zip</strong></p>
<p>将多个可迭代物的对应成员拉链(zip)到元组中。这为凑对多个可迭代物中对象很有用。</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"Angie"</span><span class="p">,</span> <span class="s2">"Brian"</span><span class="p">,</span> <span class="s2">"Cassie"</span><span class="p">,</span> <span class="s2">"David"</span><span class="p">]</span>
<span class="gp">>>> </span><span class="n">exam_1_scores</span> <span class="o">=</span> <span class="p">[</span><span class="mi">90</span><span class="p">,</span> <span class="mi">82</span><span class="p">,</span> <span class="mi">79</span><span class="p">,</span> <span class="mi">87</span><span class="p">]</span>
<span class="gp">>>> </span><span class="n">exam_2_scores</span> <span class="o">=</span> <span class="p">[</span><span class="mi">95</span><span class="p">,</span> <span class="mi">84</span><span class="p">,</span> <span class="mi">72</span><span class="p">,</span> <span class="mi">91</span><span class="p">]</span>
<span class="go"># 将会生成 ('Angie', 90, 95).. ('Brian', 82, 84).. ('Cassie', 79, 72).. ('David', 87, 91)]</span>
<span class="gp">>>> </span><span class="nb">zip</span><span class="p">(</span><span class="n">names</span><span class="p">,</span> <span class="n">exam_1_scores</span><span class="p">,</span> <span class="n">exam_2_scores</span><span class="p">)</span>
<span class="go"><zip at 0x20de1082608></span>
<span class="gp">>>> </span><span class="nb">list</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="n">names</span><span class="p">,</span> <span class="n">exam_1_scores</span><span class="p">,</span> <span class="n">exam_2_scores</span><span class="p">))</span>
<span class="go">[('Angie', 90, 95), ('Brian', 82, 84), ('Cassie', 79, 72), ('David', 87, 91)]</span>
</pre></div>
</div>
<hr class="docutils" />
<p>以下是一些 <code class="docutils literal notranslate"><span class="pre">itertools</span></code> 模组中有用的函数:</p>
<p><strong>itertools.chain</strong></p>
<p>将多个可迭代物背靠背连接在一起,返回单个可迭代物:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">itertools</span> <span class="kn">import</span> <span class="n">chain</span>
<span class="gp">>>> </span><span class="n">gen_1</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="c1"># 0.. 2.. 4</span>
<span class="gp">>>> </span><span class="n">gen_2</span> <span class="o">=</span> <span class="p">(</span><span class="n">i</span><span class="o">**</span><span class="mi">2</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">6</span><span class="p">))</span> <span class="c1"># 9.. 16.. 25</span>
<span class="gp">>>> </span><span class="n">iter_3</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"moo"</span><span class="p">,</span> <span class="s2">"cow"</span><span class="p">]</span>
<span class="gp">>>> </span><span class="n">iter_4</span> <span class="o">=</span> <span class="s2">"him"</span>
<span class="go"># 将会生成:0.. 2.. 4.. 9.. 16.. 25.. 'moo'.. 'cow'.. 'h'.. 'i'.. 'm'</span>
<span class="gp">>>> </span><span class="n">chain</span><span class="p">(</span><span class="n">gen_1</span><span class="p">,</span> <span class="n">gen_2</span><span class="p">,</span> <span class="n">iter_3</span><span class="p">,</span> <span class="n">iter_4</span><span class="p">)</span>
<span class="go"><itertools.chain at 0x20de109ec18></span>
</pre></div>
</div>
<p><strong>itertools.combinations</strong> 生成所有长度为n的可迭代物成员“组合”:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">itertools</span> <span class="kn">import</span> <span class="n">combinations</span>
<span class="go"># 将会生成:(0, 1, 2).. (0, 1, 3).. (0, 2, 3).. (1, 2, 3)</span>
<span class="gp">>>> </span><span class="n">combinations</span><span class="p">([</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">],</span> <span class="mi">3</span><span class="p">)</span> <span class="c1"># 从 [0, 1, 2, 3] 的数字生成所有长度为3的组合</span>
<span class="go"><itertools.combinations at 0x20de10a7728></span>
</pre></div>
</div>
<div class="admonition note">
<p class="admonition-title fa fa-exclamation-circle"><strong>阅读理解:Itertools第一部分</strong></p>
<p>使用 <code class="docutils literal notranslate"><span class="pre">itertools.combinations</span></code> 函数来找出从列表 <code class="docutils literal notranslate"><span class="pre">["apples",</span> <span class="pre">"bananas",</span> <span class="pre">"pears",</span> <span class="pre">"pears",</span> <span class="pre">"oranges"]</span></code> 随机选择两个成员会提供“apples”和“pears”组合的几率。</p>
</div>
<div class="admonition note">
<p class="admonition-title fa fa-exclamation-circle"><strong>阅读理解:Itertools第二部分</strong></p>
<p>设列表 <code class="docutils literal notranslate"><span class="pre">x_vals</span> <span class="pre">=</span> <span class="pre">[0.1,</span> <span class="pre">0.3,</span> <span class="pre">0.6,</span> <span class="pre">0.9]</span></code>,创建一个生成器 <code class="docutils literal notranslate"><span class="pre">y_gen</span></code> 来生成 <span class="math notranslate nohighlight">\(y = x^2\)</span> 在每一个 <span class="math notranslate nohighlight">\(x\)</span> 对应的的y值。然后,使用 <code class="docutils literal notranslate"><span class="pre">zip</span></code> 来创建一个包含 <span class="math notranslate nohighlight">\((x, y)\)</span> 元组的列表。</p>
</div>
<div class="section" id="官方说明文档链接">
<h2>官方说明文档链接<a class="headerlink" href="#官方说明文档链接" title="永久链接至标题">¶</a></h2>
<ul class="simple">
<li><p><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#typesseq-range">range</a></p></li>
<li><p><a class="reference external" href="https://docs.python.org/3/library/functions.html#enumerate">enumerate</a></p></li>
<li><p><a class="reference external" href="https://docs.python.org/3/library/functions.html#zip">zip</a></p></li>
<li><p><a class="reference external" href="https://docs.python.org/3/library/itertools.html">itertools</a></p></li>
</ul>
</div>
<div class="section" id="阅读理解答案">
<h2>阅读理解答案<a class="headerlink" href="#阅读理解答案" title="永久链接至标题">¶</a></h2>
<p><strong>Itertools第一部分:解</strong></p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">itertools</span> <span class="kn">import</span> <span class="n">combinations</span>
<span class="gp">>>> </span><span class="n">ls</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"apples"</span><span class="p">,</span> <span class="s2">"bananas"</span><span class="p">,</span> <span class="s2">"pears"</span><span class="p">,</span> <span class="s2">"pears"</span><span class="p">,</span> <span class="s2">"oranges"</span><span class="p">]</span>
<span class="gp">>>> </span><span class="n">comb_ls</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">combinations</span><span class="p">(</span><span class="n">ls</span><span class="p">,</span> <span class="mi">2</span><span class="p">))</span>
<span class="gp">>>> </span><span class="n">comb_ls</span><span class="o">.</span><span class="n">count</span><span class="p">((</span><span class="s2">"apples"</span><span class="p">,</span> <span class="s2">"pears"</span><span class="p">))</span> <span class="o">/</span> <span class="nb">len</span><span class="p">(</span><span class="n">comb_ls</span><span class="p">)</span>
<span class="go">0.2</span>
</pre></div>
</div>
<p><strong>Itertools第二部分:解</strong></p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">x_vals</span> <span class="o">=</span> <span class="p">[</span><span class="mf">0.1</span><span class="p">,</span> <span class="mf">0.3</span><span class="p">,</span> <span class="mf">0.6</span><span class="p">,</span> <span class="mf">0.9</span><span class="p">]</span>
<span class="gp">>>> </span><span class="n">y_gen</span> <span class="o">=</span> <span class="p">(</span><span class="n">x</span><span class="o">**</span><span class="mi">2</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">x_vals</span><span class="p">)</span>
<span class="gp">>>> </span><span class="nb">list</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="n">x_vals</span><span class="p">,</span> <span class="n">y_gen</span><span class="p">))</span>
<span class="go">[(0.1, 0.01), (0.3, 0.09), (0.6, 0.36), (0.9, 0.81)]</span>
</pre></div>
</div>
<p>在这个情况下,使用 <code class="docutils literal notranslate"><span class="pre">zip</span></code> 其实有点没必要的复杂化了。我们完全可以跳过创建 <code class="docutils literal notranslate"><span class="pre">y_gen</span></code> 并使用列表理解:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">x_vals</span> <span class="o">=</span> <span class="p">[</span><span class="mf">0.1</span><span class="p">,</span> <span class="mf">0.3</span><span class="p">,</span> <span class="mf">0.6</span><span class="p">,</span> <span class="mf">0.9</span><span class="p">]</span>
<span class="gp">>>> </span><span class="p">[(</span><span class="n">x</span><span class="p">,</span> <span class="n">x</span><span class="o">**</span><span class="mi">2</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">x_vals</span><span class="p">]</span>
<span class="go">[(0.1, 0.01), (0.3, 0.09), (0.6, 0.36), (0.9, 0.81)]</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="Functions.html" class="btn btn-neutral float-right" title="函数基础" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
<a href="Generators_and_Comprehensions.html" class="btn btn-neutral float-left" title="生成器和理解表达式" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
© Copyright 2019, Ryan Soklaski
</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>