-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathpython3_crash8.html
358 lines (301 loc) · 45.9 KB
/
python3_crash8.html
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
<!DOCTYPE html>
<html lang="cn">
<head>
<meta charset="utf-8" />
<title>[雪峰磁针石博客]python3快速入门教程2数据结构4其他数据结构</title>
<link rel="stylesheet" href="/theme/css/main.css" />
</head>
<body id="index" class="home">
<header id="banner" class="body">
<h1><a href="/">python自动化测试人工智能 </a></h1>
<nav><ul>
<li><a href="/category/ba-zi.html">八字</a></li>
<li><a href="/category/ce-shi.html">测试</a></li>
<li><a href="/category/ce-shi-kuang-jia.html">测试框架</a></li>
<li><a href="/category/common.html">common</a></li>
<li><a href="/category/da-shu-ju.html">大数据</a></li>
<li><a href="/category/feng-shui.html">风水</a></li>
<li><a href="/category/ji-qi-xue-xi.html">机器学习</a></li>
<li><a href="/category/jie-meng.html">解梦</a></li>
<li><a href="/category/linux.html">linux</a></li>
<li class="active"><a href="/category/python.html">python</a></li>
<li><a href="/category/shu-ji.html">书籍</a></li>
<li><a href="/category/shu-ju-fen-xi.html">数据分析</a></li>
<li><a href="/category/zhong-cao-yao.html">中草药</a></li>
<li><a href="/category/zhong-yi.html">中医</a></li>
</ul></nav>
</header><!-- /#banner -->
<section id="content" class="body">
<article>
<header>
<h1 class="entry-title">
<a href="/python3_crash8.html" rel="bookmark"
title="Permalink to [雪峰磁针石博客]python3快速入门教程2数据结构4其他数据结构">[雪峰磁针石博客]python3快速入门教程2数据结构4其他数据结构</a></h1>
</header>
<div class="entry-content">
<footer class="post-info">
<abbr class="published" title="2018-09-02T10:40:00+08:00">
Published: 日 02 九月 2018
</abbr>
<address class="vcard author">
By <a class="url fn" href="/author/andrew.html">andrew</a>
</address>
<p>In <a href="/category/python.html">python</a>.</p>
</footer><!-- /.post-info --> <h2 id="_1">数据结构</h2>
<h4 id="_2">函数式编程工具</h4>
<p>对于列表来讲,有三个内置函数非常有用: filter(), map(), 以及reduce()。 </p>
<p>filter(function, sequence)返回function(item)为true的子序列。会尽量返回和sequence相同的类型)。sequence是string或者tuple时返回相同类型,其他情况返回list 。实例:返回能被3或者5整除的序列: </p>
<div class="highlight"><pre><span></span><span class="o">>>></span> <span class="k">def</span> <span class="nf">f</span><span class="p">(</span><span class="n">x</span><span class="p">):</span> <span class="k">return</span> <span class="n">x</span> <span class="o">%</span> <span class="mi">3</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">x</span> <span class="o">%</span> <span class="mi">5</span> <span class="o">==</span> <span class="mi">0</span>
<span class="o">...</span>
<span class="o">>>></span> <span class="nb">list</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="nb">range</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">25</span><span class="p">)))</span>
<span class="p">[</span><span class="mi">3</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">9</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">12</span><span class="p">,</span> <span class="mi">15</span><span class="p">,</span> <span class="mi">18</span><span class="p">,</span> <span class="mi">20</span><span class="p">,</span> <span class="mi">21</span><span class="p">,</span> <span class="mi">24</span><span class="p">]</span>
</pre></div>
<p>map(function, sequence) 为每个元素调用 function(item),并将返回值组成一个列表返回。例如计算立方: </p>
<div class="highlight"><pre><span></span><span class="o">>>></span> <span class="k">def</span> <span class="nf">cube</span><span class="p">(</span><span class="n">x</span><span class="p">):</span> <span class="k">return</span> <span class="n">x</span><span class="o">*</span><span class="n">x</span><span class="o">*</span><span class="n">x</span>
<span class="o">...</span>
<span class="o">>>></span> <span class="nb">list</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="n">cube</span><span class="p">,</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">11</span><span class="p">)))</span>
<span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">27</span><span class="p">,</span> <span class="mi">64</span><span class="p">,</span> <span class="mi">125</span><span class="p">,</span> <span class="mi">216</span><span class="p">,</span> <span class="mi">343</span><span class="p">,</span> <span class="mi">512</span><span class="p">,</span> <span class="mi">729</span><span class="p">,</span> <span class="mi">1000</span><span class="p">]</span>
</pre></div>
<p>函数需要多个参数,可以传入对应的序列。如果参数和序列数不匹配,则按最短长度来处理。如果传入的序列长度不匹配,则用None不全。例如: </p>
<div class="highlight"><pre><span></span><span class="o">>>></span> <span class="n">seq</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span><span class="mi">8</span><span class="p">)</span>
<span class="o">>>></span> <span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">):</span> <span class="k">return</span> <span class="n">x</span><span class="o">+</span><span class="n">y</span>
<span class="o">...</span>
<span class="o">>>></span> <span class="nb">list</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="n">add</span><span class="p">,</span> <span class="n">seq</span><span class="p">,</span> <span class="n">seq</span><span class="p">))</span>
<span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">12</span><span class="p">,</span> <span class="mi">14</span><span class="p">]</span>
<span class="o">>>></span> <span class="n">seq1</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span><span class="mi">8</span><span class="p">)</span>
<span class="o">>>></span> <span class="n">seq2</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="o">>>></span> <span class="nb">list</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="n">add</span><span class="p">,</span> <span class="n">seq1</span><span class="p">,</span> <span class="n">seq2</span><span class="p">))</span>
<span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">12</span><span class="p">,</span> <span class="mi">14</span><span class="p">]</span>
<span class="o">>>></span> <span class="nb">list</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="n">add</span><span class="p">,</span> <span class="n">seq1</span><span class="p">,</span> <span class="n">seq</span><span class="p">,</span> <span class="n">seq2</span><span class="p">))</span>
<span class="o">---------------------------------------------------------------------------</span>
<span class="ne">TypeError</span> <span class="n">Traceback</span> <span class="p">(</span><span class="n">most</span> <span class="n">recent</span> <span class="n">call</span> <span class="n">last</span><span class="p">)</span>
<span class="o"><</span><span class="n">ipython</span><span class="o">-</span><span class="nb">input</span><span class="o">-</span><span class="mi">19</span><span class="o">-</span><span class="mi">2</span><span class="n">ddf805a1583</span><span class="o">></span> <span class="ow">in</span> <span class="o"><</span><span class="n">module</span><span class="o">></span><span class="p">()</span>
<span class="o">----></span> <span class="mi">1</span> <span class="nb">list</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="n">add</span><span class="p">,</span> <span class="n">seq1</span><span class="p">,</span> <span class="n">seq</span><span class="p">,</span> <span class="n">seq2</span><span class="p">))</span>
<span class="ne">TypeError</span><span class="p">:</span> <span class="n">add</span><span class="p">()</span> <span class="n">takes</span> <span class="mi">2</span> <span class="n">positional</span> <span class="n">arguments</span> <span class="n">but</span> <span class="mi">3</span> <span class="n">were</span> <span class="n">given</span>
</pre></div>
<p>reduce(function, sequence) 先以序列的前两个元素调用函数function,再以返回值和第三个参数调用,以此类推。比如计算 1 到 10 的整数之和: </p>
<div class="highlight"><pre><span></span><span class="o">>>></span> <span class="kn">from</span> <span class="nn">functools</span> <span class="kn">import</span> <span class="nb">reduce</span>
<span class="o">>>></span> <span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">):</span> <span class="k">return</span> <span class="n">x</span><span class="o">+</span><span class="n">y</span>
<span class="o">...</span>
<span class="o">>>></span> <span class="nb">reduce</span><span class="p">(</span><span class="n">add</span><span class="p">,</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">11</span><span class="p">))</span>
<span class="mi">55</span>
</pre></div>
<p>如果序列中只有一个元素,就返回该元素,如果序列是空的,就报异常TypeError:</p>
<div class="highlight"><pre><span></span><span class="o">>>></span> <span class="nb">reduce</span><span class="p">(</span><span class="n">add</span><span class="p">,</span> <span class="p">[])</span>
<span class="n">Traceback</span> <span class="p">(</span><span class="n">most</span> <span class="n">recent</span> <span class="n">call</span> <span class="n">last</span><span class="p">):</span>
<span class="n">File</span> <span class="s2">"<stdin>"</span><span class="p">,</span> <span class="n">line</span> <span class="mi">1</span><span class="p">,</span> <span class="ow">in</span> <span class="o"><</span><span class="n">module</span><span class="o">></span>
<span class="ne">TypeError</span><span class="p">:</span> <span class="nb">reduce</span><span class="p">()</span> <span class="n">of</span> <span class="n">empty</span> <span class="n">sequence</span> <span class="k">with</span> <span class="n">no</span> <span class="n">initial</span> <span class="n">value</span>
<span class="o">>>></span> <span class="nb">reduce</span><span class="p">(</span><span class="n">add</span><span class="p">,</span> <span class="p">[</span><span class="mi">3</span><span class="p">])</span>
<span class="mi">3</span>
</pre></div>
<p>可以传入第三个参数作为默认值。如果序列是空就返回默认值。 </p>
<div class="highlight"><pre><span></span><span class="o">>>></span> <span class="k">def</span> <span class="nf">sum</span><span class="p">(</span><span class="n">seq</span><span class="p">):</span>
<span class="o">...</span> <span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">):</span> <span class="k">return</span> <span class="n">x</span><span class="o">+</span><span class="n">y</span>
<span class="o">...</span> <span class="k">return</span> <span class="nb">reduce</span><span class="p">(</span><span class="n">add</span><span class="p">,</span> <span class="n">seq</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="o">...</span>
<span class="o">>>></span> <span class="nb">sum</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">11</span><span class="p">))</span>
<span class="mi">55</span>
<span class="o">>>></span> <span class="nb">sum</span><span class="p">([])</span>
<span class="mi">0</span>
</pre></div>
<p>不要像示例这样定义 sum(),内置的 sum(sequence) 函数更好用。</p>
<h3 id="del">del 语句</h3>
<p>del可基于索引而不是值来删除元素。:del 语句。与 pop() 方法不同,它不返回值。del 还可以从列表中删除区间或清空整个列表。例如: </p>
<div class="highlight"><pre><span></span><span class="o">>>></span> <span class="n">a</span> <span class="o">=</span> <span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mf">66.25</span><span class="p">,</span> <span class="mi">333</span><span class="p">,</span> <span class="mi">333</span><span class="p">,</span> <span class="mf">1234.5</span><span class="p">]</span>
<span class="o">>>></span> <span class="k">del</span> <span class="n">a</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="o">>>></span> <span class="n">a</span>
<span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mf">66.25</span><span class="p">,</span> <span class="mi">333</span><span class="p">,</span> <span class="mi">333</span><span class="p">,</span> <span class="mf">1234.5</span><span class="p">]</span>
<span class="o">>>></span> <span class="k">del</span> <span class="n">a</span><span class="p">[</span><span class="mi">2</span><span class="p">:</span><span class="mi">4</span><span class="p">]</span>
<span class="o">>>></span> <span class="n">a</span>
<span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mf">66.25</span><span class="p">,</span> <span class="mf">1234.5</span><span class="p">]</span>
<span class="o">>>></span> <span class="k">del</span> <span class="n">a</span><span class="p">[:]</span>
<span class="o">>>></span> <span class="n">a</span>
<span class="p">[]</span>
</pre></div>
<p>del 也可以删除整个变量: </p>
<div class="highlight"><pre><span></span><span class="o">>>></span> <span class="k">del</span> <span class="n">a</span>
</pre></div>
<p>此后再引用a会引发错误。 </p>
<h3 id="_3">元组和序列</h3>
<p>链表和字符串有很多通用的属性,例如索引和切割操作。它们都属于序列类型(参见 Sequence Types — str, unicode, list, tuple, bytearray, buffer, xrange https://docs.python.org/2/library/stdtypes.html#typesseq)。Python在进化时也可能会加入其它的序列类型。 </p>
<p>元组由逗号分隔的值组成:</p>
<div class="highlight"><pre><span></span><span class="o">>>></span> <span class="n">t</span> <span class="o">=</span> <span class="mi">12345</span><span class="p">,</span> <span class="mi">54321</span><span class="p">,</span> <span class="s1">'hello!'</span>
<span class="o">>>></span> <span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="mi">12345</span>
<span class="o">>>></span> <span class="n">t</span>
<span class="p">(</span><span class="mi">12345</span><span class="p">,</span> <span class="mi">54321</span><span class="p">,</span> <span class="s1">'hello!'</span><span class="p">)</span>
<span class="o">>>></span> <span class="c1"># Tuples may be nested:</span>
<span class="o">...</span> <span class="n">u</span> <span class="o">=</span> <span class="n">t</span><span class="p">,</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="o">>>></span> <span class="n">u</span>
<span class="p">((</span><span class="mi">12345</span><span class="p">,</span> <span class="mi">54321</span><span class="p">,</span> <span class="s1">'hello!'</span><span class="p">),</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="o">>>></span> <span class="c1"># Tuples are immutable:</span>
<span class="o">...</span> <span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="mi">88888</span>
<span class="n">Traceback</span> <span class="p">(</span><span class="n">most</span> <span class="n">recent</span> <span class="n">call</span> <span class="n">last</span><span class="p">):</span>
<span class="n">File</span> <span class="s2">"<stdin>"</span><span class="p">,</span> <span class="n">line</span> <span class="mi">1</span><span class="p">,</span> <span class="ow">in</span> <span class="o"><</span><span class="n">module</span><span class="o">></span>
<span class="ne">TypeError</span><span class="p">:</span> <span class="s1">'tuple'</span> <span class="nb">object</span> <span class="n">does</span> <span class="ow">not</span> <span class="n">support</span> <span class="n">item</span> <span class="n">assignment</span>
<span class="o">>>></span> <span class="c1"># but they can contain mutable objects:</span>
<span class="o">...</span> <span class="n">v</span> <span class="o">=</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="p">[</span><span class="mi">3</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">])</span>
<span class="o">>>></span> <span class="n">v</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="p">[</span><span class="mi">3</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">])</span>
</pre></div>
<p>元组在输出时总是有括号的,嵌套元组可以清晰展示。在输入时可以没有括号,清晰起见,建议尽量添加括号。不能给元组的的元素赋值,但可以创建包含可变对象的元组,比如列表。<br>
元组是不可变的,通常用于包含不同类型的元素,并通过解包或索引访问(collections模块中namedtuple中可以通过属性访问)。列表是可变的,元素通常是相同的类型,用于迭代。<br>
空的括号可以创建空元组;要创建一个单元素元组可以在值后面跟一个逗号单元素元组。丑陋,但是有效。例如:</p>
<div class="highlight"><pre><span></span><span class="o">>>></span> <span class="n">empty</span> <span class="o">=</span> <span class="p">()</span>
<span class="o">>>></span> <span class="n">singleton</span> <span class="o">=</span> <span class="s1">'hello'</span><span class="p">,</span> <span class="c1"># <-- note trailing comma</span>
<span class="o">>>></span> <span class="nb">len</span><span class="p">(</span><span class="n">empty</span><span class="p">)</span>
<span class="mi">0</span>
<span class="o">>>></span> <span class="nb">len</span><span class="p">(</span><span class="n">singleton</span><span class="p">)</span>
<span class="mi">1</span>
<span class="o">>>></span> <span class="n">singleton</span>
<span class="p">(</span><span class="s1">'hello'</span><span class="p">,)</span>
<span class="o">>>></span> <span class="p">(</span><span class="s1">'hello'</span><span class="p">,)</span>
<span class="p">(</span><span class="s1">'hello'</span><span class="p">,)</span>
</pre></div>
<p>语句 t = 12345, 54321, 'hello!' 是 元组打包 (tuple packing)的例子:值12345,54321 和 'hello!' 被封装进元组。其逆操作如下:</p>
<div class="highlight"><pre><span></span><span class="o">>>></span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">z</span> <span class="o">=</span> <span class="n">t</span>
</pre></div>
<p>等号右边可以是任何序列,即序列解包。序列解包要求左侧的变量数目与序列的元素个数相同。</p>
<h3 id="_4">集合</h3>
<p>集合是无序不重复元素的集。基本用法有关系测试和去重。集合还支持 union(联合),intersection(交),difference(差)和 sysmmetric difference(对称差集)等数学运算。<br>
大括号或set()函数可以用来创建集合。注意:想要创建空集合只能使用 set() 而不是 {}。 </p>
<div class="highlight"><pre><span></span><span class="o">>>></span> <span class="n">basket</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'apple'</span><span class="p">,</span> <span class="s1">'orange'</span><span class="p">,</span> <span class="s1">'apple'</span><span class="p">,</span> <span class="s1">'pear'</span><span class="p">,</span> <span class="s1">'orange'</span><span class="p">,</span> <span class="s1">'banana'</span><span class="p">]</span>
<span class="o">>>></span> <span class="n">fruit</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">basket</span><span class="p">)</span> <span class="c1"># create a set without duplicates</span>
<span class="o">>>></span> <span class="n">fruit</span>
<span class="nb">set</span><span class="p">([</span><span class="s1">'orange'</span><span class="p">,</span> <span class="s1">'pear'</span><span class="p">,</span> <span class="s1">'apple'</span><span class="p">,</span> <span class="s1">'banana'</span><span class="p">])</span>
<span class="o">>>></span> <span class="s1">'orange'</span> <span class="ow">in</span> <span class="n">fruit</span> <span class="c1"># fast membership testing</span>
<span class="bp">True</span>
<span class="o">>>></span> <span class="s1">'crabgrass'</span> <span class="ow">in</span> <span class="n">fruit</span>
<span class="bp">False</span>
<span class="o">>>></span> <span class="c1"># Demonstrate set operations on unique letters from two words</span>
<span class="o">...</span>
<span class="o">>>></span> <span class="n">a</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="s1">'abracadabra'</span><span class="p">)</span>
<span class="o">>>></span> <span class="n">b</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="s1">'alacazam'</span><span class="p">)</span>
<span class="o">>>></span> <span class="n">a</span> <span class="c1"># unique letters in a</span>
<span class="nb">set</span><span class="p">([</span><span class="s1">'a'</span><span class="p">,</span> <span class="s1">'r'</span><span class="p">,</span> <span class="s1">'b'</span><span class="p">,</span> <span class="s1">'c'</span><span class="p">,</span> <span class="s1">'d'</span><span class="p">])</span>
<span class="o">>>></span> <span class="n">a</span> <span class="o">-</span> <span class="n">b</span> <span class="c1"># letters in a but not in b</span>
<span class="nb">set</span><span class="p">([</span><span class="s1">'r'</span><span class="p">,</span> <span class="s1">'d'</span><span class="p">,</span> <span class="s1">'b'</span><span class="p">])</span>
<span class="o">>>></span> <span class="n">a</span> <span class="o">|</span> <span class="n">b</span> <span class="c1"># letters in either a or b</span>
<span class="nb">set</span><span class="p">([</span><span class="s1">'a'</span><span class="p">,</span> <span class="s1">'c'</span><span class="p">,</span> <span class="s1">'r'</span><span class="p">,</span> <span class="s1">'d'</span><span class="p">,</span> <span class="s1">'b'</span><span class="p">,</span> <span class="s1">'m'</span><span class="p">,</span> <span class="s1">'z'</span><span class="p">,</span> <span class="s1">'l'</span><span class="p">])</span>
<span class="o">>>></span> <span class="n">a</span> <span class="o">&</span> <span class="n">b</span> <span class="c1"># letters in both a and b</span>
<span class="nb">set</span><span class="p">([</span><span class="s1">'a'</span><span class="p">,</span> <span class="s1">'c'</span><span class="p">])</span>
<span class="o">>>></span> <span class="n">a</span> <span class="o">^</span> <span class="n">b</span> <span class="c1"># letters in a or b but not both</span>
<span class="nb">set</span><span class="p">([</span><span class="s1">'r'</span><span class="p">,</span> <span class="s1">'d'</span><span class="p">,</span> <span class="s1">'b'</span><span class="p">,</span> <span class="s1">'m'</span><span class="p">,</span> <span class="s1">'z'</span><span class="p">,</span> <span class="s1">'l'</span><span class="p">])</span>
</pre></div>
<p>类似列表推导式,集合也可以使用推导式: </p>
<div class="highlight"><pre><span></span><span class="o">>>></span> <span class="n">a</span> <span class="o">=</span> <span class="p">{</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="s1">'abracadabra'</span> <span class="k">if</span> <span class="n">x</span> <span class="ow">not</span> <span class="ow">in</span> <span class="s1">'abc'</span><span class="p">}</span>
<span class="o">>>></span> <span class="n">a</span>
<span class="p">{</span><span class="s1">'r'</span><span class="p">,</span> <span class="s1">'d'</span><span class="p">}</span>
</pre></div>
<h3 id="_5">字典</h3>
<p>字典 (参见 <a href="https://docs.python.org/2/library/stdtypes.html#typesmapping">Mapping Types — dict</a> )。字典在一些语言中称为联合内存 (associative memories) 或联合数组 (associative arrays)。字典以key为索引,key可以是任意不可变类型,通常为字符串或数值。 </p>
<p>可以把字典看做无序的键:值对 (key:value对)集合。{}创建空的字典。key:value的格式,以逗号分割。 </p>
<p>字典的主要操作是依据key来读写值。用 del 可以删除key:value对。读不存在的key取值会导致错误。 </p>
<p>keys() 返回字典中所有关键字组成的无序列表。使用 in 可以判断成员关系。 </p>
<p>这里是使用字典的一个小示例: </p>
<div class="highlight"><pre><span></span><span class="o">>>></span> <span class="n">tel</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'jack'</span><span class="p">:</span> <span class="mi">4098</span><span class="p">,</span> <span class="s1">'sape'</span><span class="p">:</span> <span class="mi">4139</span><span class="p">}</span>
<span class="o">>>></span> <span class="n">tel</span><span class="p">[</span><span class="s1">'guido'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">4127</span>
<span class="o">>>></span> <span class="n">tel</span>
<span class="p">{</span><span class="s1">'sape'</span><span class="p">:</span> <span class="mi">4139</span><span class="p">,</span> <span class="s1">'guido'</span><span class="p">:</span> <span class="mi">4127</span><span class="p">,</span> <span class="s1">'jack'</span><span class="p">:</span> <span class="mi">4098</span><span class="p">}</span>
<span class="o">>>></span> <span class="n">tel</span><span class="p">[</span><span class="s1">'jack'</span><span class="p">]</span>
<span class="mi">4098</span>
<span class="o">>>></span> <span class="k">del</span> <span class="n">tel</span><span class="p">[</span><span class="s1">'sape'</span><span class="p">]</span>
<span class="o">>>></span> <span class="n">tel</span><span class="p">[</span><span class="s1">'irv'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">4127</span>
<span class="o">>>></span> <span class="n">tel</span>
<span class="p">{</span><span class="s1">'guido'</span><span class="p">:</span> <span class="mi">4127</span><span class="p">,</span> <span class="s1">'irv'</span><span class="p">:</span> <span class="mi">4127</span><span class="p">,</span> <span class="s1">'jack'</span><span class="p">:</span> <span class="mi">4098</span><span class="p">}</span>
<span class="o">>>></span> <span class="n">tel</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span>
<span class="p">[</span><span class="s1">'guido'</span><span class="p">,</span> <span class="s1">'irv'</span><span class="p">,</span> <span class="s1">'jack'</span><span class="p">]</span>
<span class="o">>>></span> <span class="s1">'guido'</span> <span class="ow">in</span> <span class="n">tel</span>
<span class="bp">True</span>
</pre></div>
<p>dict() 构造函数可以直接从 key-value 序列中创建字典: </p>
<div class="highlight"><pre><span></span><span class="o">>>></span> <span class="nb">dict</span><span class="p">([(</span><span class="s1">'sape'</span><span class="p">,</span> <span class="mi">4139</span><span class="p">),</span> <span class="p">(</span><span class="s1">'guido'</span><span class="p">,</span> <span class="mi">4127</span><span class="p">),</span> <span class="p">(</span><span class="s1">'jack'</span><span class="p">,</span> <span class="mi">4098</span><span class="p">)])</span>
<span class="p">{</span><span class="s1">'sape'</span><span class="p">:</span> <span class="mi">4139</span><span class="p">,</span> <span class="s1">'jack'</span><span class="p">:</span> <span class="mi">4098</span><span class="p">,</span> <span class="s1">'guido'</span><span class="p">:</span> <span class="mi">4127</span><span class="p">}</span>
</pre></div>
<p>字典推导式可以从任意的键值表达式中创建字典: </p>
<div class="highlight"><pre><span></span><span class="o">>>></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="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">6</span><span class="p">)}</span>
<span class="p">{</span><span class="mi">2</span><span class="p">:</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">4</span><span class="p">:</span> <span class="mi">16</span><span class="p">,</span> <span class="mi">6</span><span class="p">:</span> <span class="mi">36</span><span class="p">}</span>
</pre></div>
<p>如果关键字都是简单的字符串,可通过关键字参数指定 key-value 对: </p>
<div class="highlight"><pre><span></span>>>> dict(sape=4139, guido=4127, jack=4098)
{'sape': 4139, 'jack': 4098, 'guido': 4127}
</pre></div>
<h3 id="_6">序列和其它类型比较</h3>
<p>序列对象可以与相同类型的其它对象比较。比较基于字典序:首先比较前两个元素,如果不同,就决定了比较的结果;如果相同,就比较后两个元素,依此类推,直到有序列结束。如果两个元素是同样类型的序列,就递归比较。如果两个序列的所有子项都相等则序列相等。如果一个序列是另一个序列的初始子序列,较短的序列就小于另一个。字符串的字典序基于ASCII。</p>
<div class="highlight"><pre><span></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="o"><</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">4</span><span class="p">)</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="o"><</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">4</span><span class="p">]</span>
<span class="s1">'ABC'</span> <span class="o"><</span> <span class="s1">'C'</span> <span class="o"><</span> <span class="s1">'Pascal'</span> <span class="o"><</span> <span class="s1">'Python'</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="o"><</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">4</span><span class="p">)</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="o"><</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="o">-</span><span class="mi">1</span><span class="p">)</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="o">==</span> <span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">2.0</span><span class="p">,</span> <span class="mf">3.0</span><span class="p">)</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="p">(</span><span class="s1">'aa'</span><span class="p">,</span> <span class="s1">'ab'</span><span class="p">))</span> <span class="o"><</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="p">(</span><span class="s1">'abc'</span><span class="p">,</span> <span class="s1">'a'</span><span class="p">),</span> <span class="mi">4</span><span class="p">)</span>
</pre></div>
<p>注意可以比较不同类型的对象也是合法的。比较结果是确定的但是比较随意: 基于类型名(Python未来版本中可能发生变化)排序。因此,列表始终小于字符串,字符串总是小于元组,等等。 不同数值类型按照它们的值比较,所以 0 等于 0.0,等等。 </p>
<h2 id="_7">计算不同版本人脸识别框的重合面积</h2>
<p>现有某图片,版本1识别的坐标为:(60, 188, 260, 387),版本2识别的坐标为(106, 291, 340, 530)))。格式为left, top, right, buttom。
请计算:公共的像素总数,版本1的像素总数,版本2的像素总数,版本1的重合面积比例,版本2的重合面积比例.</p>
<p>参考代码:</p>
<div class="highlight"><pre><span></span><span class="ch">#!/usr/bin/python3</span>
<span class="c1"># -*- coding: utf-8 -*-</span>
<span class="c1"># Author: xurongzhong#126.com wechat:pythontesting qq:37391319</span>
<span class="c1"># 技术支持 钉钉群:21745728(可以加钉钉pythontesting邀请加入) </span>
<span class="c1"># qq群:144081101 591302926 567351477</span>
<span class="c1"># CreateDate: 2018-6-07</span>
<span class="k">def</span> <span class="nf">get_area</span><span class="p">(</span><span class="n">pos</span><span class="p">):</span>
<span class="n">left</span><span class="p">,</span> <span class="n">top</span><span class="p">,</span> <span class="n">right</span><span class="p">,</span> <span class="n">buttom</span> <span class="o">=</span> <span class="n">pos</span>
<span class="n">left</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">left</span><span class="p">)</span>
<span class="n">top</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">top</span><span class="p">)</span>
<span class="n">width</span> <span class="o">=</span> <span class="n">right</span> <span class="o">-</span> <span class="n">left</span>
<span class="n">height</span> <span class="o">=</span> <span class="n">buttom</span> <span class="o">-</span> <span class="n">top</span>
<span class="k">return</span> <span class="p">(</span><span class="n">width</span><span class="o">*</span><span class="n">height</span><span class="p">,</span> <span class="n">left</span><span class="p">,</span> <span class="n">top</span><span class="p">,</span> <span class="n">right</span><span class="p">,</span> <span class="n">buttom</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">overlap</span><span class="p">(</span><span class="n">pos1</span><span class="p">,</span> <span class="n">pos2</span><span class="p">):</span>
<span class="n">area1</span><span class="p">,</span> <span class="n">left1</span><span class="p">,</span> <span class="n">top1</span><span class="p">,</span> <span class="n">right1</span><span class="p">,</span> <span class="n">buttom1</span> <span class="o">=</span> <span class="n">get_area</span><span class="p">(</span><span class="n">pos1</span><span class="p">)</span>
<span class="n">area2</span><span class="p">,</span> <span class="n">left2</span><span class="p">,</span> <span class="n">top2</span><span class="p">,</span> <span class="n">right2</span><span class="p">,</span> <span class="n">buttom2</span> <span class="o">=</span> <span class="n">get_area</span><span class="p">(</span><span class="n">pos2</span><span class="p">)</span>
<span class="n">left</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">left1</span><span class="p">,</span> <span class="n">left2</span><span class="p">)</span>
<span class="n">top</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">top1</span><span class="p">,</span> <span class="n">top2</span><span class="p">)</span>
<span class="n">left</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">left</span><span class="p">)</span>
<span class="n">top</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">top</span><span class="p">)</span>
<span class="n">right</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="n">right1</span><span class="p">,</span> <span class="n">right2</span><span class="p">)</span>
<span class="n">buttom</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="n">buttom1</span><span class="p">,</span> <span class="n">buttom2</span><span class="p">)</span>
<span class="k">if</span> <span class="n">right</span> <span class="o"><=</span> <span class="n">left</span> <span class="ow">or</span> <span class="n">buttom</span> <span class="o"><=</span> <span class="n">top</span><span class="p">:</span>
<span class="n">area</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">area</span> <span class="o">=</span> <span class="p">(</span><span class="n">right</span> <span class="o">-</span> <span class="n">left</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">buttom</span> <span class="o">-</span> <span class="n">top</span><span class="p">)</span>
<span class="k">return</span> <span class="p">(</span><span class="n">area</span><span class="p">,</span> <span class="n">area1</span><span class="p">,</span> <span class="n">area2</span><span class="p">,</span> <span class="nb">float</span><span class="p">(</span><span class="n">area</span><span class="p">)</span><span class="o">/</span><span class="n">area1</span><span class="p">,</span> <span class="nb">float</span><span class="p">(</span><span class="n">area</span><span class="p">)</span><span class="o">/</span><span class="n">area2</span><span class="p">)</span>
<span class="k">print</span><span class="p">(</span><span class="n">overlap</span><span class="p">((</span><span class="mi">60</span><span class="p">,</span> <span class="mi">188</span><span class="p">,</span> <span class="mi">260</span><span class="p">,</span> <span class="mi">387</span><span class="p">),</span> <span class="p">(</span><span class="mi">106</span><span class="p">,</span> <span class="mi">291</span><span class="p">,</span> <span class="mi">340</span><span class="p">,</span> <span class="mi">530</span><span class="p">)))</span>
</pre></div>
<p><a href="https://github.com/china-testing/python-api-tesing/tree/master/weeks/2018_06_07">详细代码地址</a></p>
<p>执行</p>
<div class="highlight"><pre><span></span><span class="err">$</span> <span class="n">python3</span> <span class="n">overlap</span><span class="o">.</span><span class="n">py</span>
<span class="p">(</span><span class="mi">14784</span><span class="p">,</span> <span class="mi">39800</span><span class="p">,</span> <span class="mi">55926</span><span class="p">,</span> <span class="mf">0.3714572864321608</span><span class="p">,</span> <span class="mf">0.2643493187426242</span><span class="p">)</span>
</pre></div>
<h2 id="_8">参考资料</h2>
<ul>
<li>python测试等IT技术支持qq群: 144081101(后期会录制视频存在该群群文件) 591302926 567351477 钉钉免费群:21745728</li>
<li>道家技术-手相手诊看相中医等钉钉群21734177 qq群:391441566 184175668 338228106 看手相、面相、舌相、抽签、体质识别。服务费50元每人次起。请联系钉钉或者微信pythontesting</li>
<li><a href="https://china-testing.github.io/python3_crash8.html">本文最新版本地址</a></li>
<li><a href="https://github.com/china-testing/python-api-tesing">本文涉及的python测试开发库</a> 谢谢点赞!</li>
<li><a href="https://github.com/china-testing/python-api-tesing/blob/master/books.md">本文相关海量书籍下载</a></li>
<li><a href="https://china-testing.github.io/testing_training.html">接口自动化性能测试线上培训大纲</a></li>
</ul>
</div><!-- /.entry-content -->
</article>
</section>
<section id="extras" class="body">
<div class="blogroll">
<h2>links</h2>
<ul>
<li><a href="https://china-testing.github.io/testing_training.html">自动化性能接口测试线上及深圳培训与项目实战 qq群:144081101 591302926</a></li>
<li><a href="http://blog.sciencenet.cn/blog-2604609-1112306.html">pandas数据分析scrapy爬虫 521070358 Py人工智能pandas-opencv 6089740</a></li>
<li><a href="http://blog.sciencenet.cn/blog-2604609-1112306.html">中医解梦看相八字算命qq群 391441566 csdn书籍下载-python爬虫 437355848</a></li>
</ul>
</div><!-- /.blogroll -->
</section><!-- /#extras -->
<footer id="contentinfo" class="body">
<address id="about" class="vcard body">
Proudly powered by <a href="http://getpelican.com/">Pelican</a>, which takes great advantage of <a href="http://python.org">Python</a>.
</address><!-- /#about -->
<p>The theme is by <a href="http://coding.smashingmagazine.com/2009/08/04/designing-a-html-5-layout-from-scratch/">Smashing Magazine</a>, thanks!</p>
</footer><!-- /#contentinfo -->
</body>
</html>