Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit cbd1e66

Browse files
committed
更新循环
1 parent dd0db78 commit cbd1e66

File tree

1 file changed

+72
-40
lines changed

1 file changed

+72
-40
lines changed

‎Learning Python/3、语句和语法/3. while 和 for 循环.ipynb

Lines changed: 72 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
"cell_type": "markdown",
55
"metadata": {},
66
"source": [
7-
"# while 循环 \n",
7+
"# 1. while 循环 \n",
88
"while 语句是 Python 语言中最通用的迭代结构。只要顶端测试一直计算到真值,就会重复执行一个语句块。 \n",
99
"\n",
10-
"## 一般格式 \n",
10+
"## 1.1 一般格式 \n",
1111
"while 语句最完整的书写格式是:首行以及测试表达式、有一列或多列缩进语句的主体以及一个可选的 else 部分(控制权离开循环而又没有碰到 break 语句时会执行)。Python 会一直计算开头的 test,然后执行循环主体内的语句,直到测试返回假值为止。"
1212
]
1313
},
@@ -89,13 +89,13 @@
8989
"cell_type": "markdown",
9090
"metadata": {},
9191
"source": [
92-
"# break、continue、pass 和循环 else \n",
92+
"# 2. break、continue、pass 和循环 else \n",
9393
"- **break:**跳出最近所在的循环(跳过整个循环语句)。\n",
9494
"- **continue:**跳到最近所在循环的开头处(来到循环的首行)。\n",
9595
"- **pass:**什么事也不做,只是空站位语句。\n",
9696
"- **循环 else 块:**只有当循环正常离开时才会执行(也就是没有碰到 break 语句)。 \n",
9797
"\n",
98-
"## 一般循环格式 \n",
98+
"## 2.1 一般循环格式 \n",
9999
"加入 break 和 continue 语句后,while 循环的一般格式如下所示。"
100100
]
101101
},
@@ -126,7 +126,7 @@
126126
"cell_type": "markdown",
127127
"metadata": {},
128128
"source": [
129-
"## pass \n",
129+
"## 2.2 pass \n",
130130
"pass 语句是无运算的占位语句,当语法需要语句并且还没有任何实用的语句可写时,就可以使用它。它通常用于为复合语句编写一个空的主体。 \n",
131131
"\n",
132132
"pass 有时指的是"以后会填上",只是暂时用于填充函数主体而已:"
@@ -206,7 +206,7 @@
206206
"cell_type": "markdown",
207207
"metadata": {},
208208
"source": [
209-
"## continue \n",
209+
"## 2.3 continue \n",
210210
"continue 语句会立即跳到循环的顶端。偶尔也避免语句的嵌套。"
211211
]
212212
},
@@ -235,7 +235,7 @@
235235
"cell_type": "markdown",
236236
"metadata": {},
237237
"source": [
238-
"## break \n",
238+
"## 2.4 break \n",
239239
"break 语句会立刻离开循环。有时可以引入 break 来避免嵌套化。"
240240
]
241241
},
@@ -267,10 +267,10 @@
267267
"cell_type": "markdown",
268268
"metadata": {},
269269
"source": [
270-
"## 循环 else \n",
270+
"## 2.5 循环 else \n",
271271
"和循环 else 子句结合时,break 语句通常可以忽略其他语言中所需的搜索状态标志位。 \n",
272272
"\n",
273-
"例如,下列程序搜索大于1的因子,来决定正整数 y 是否为质数。"
273+
"例如,下列程序搜索大于 1 的因子,来决定正整数 y 是否为质数。"
274274
]
275275
},
276276
{
@@ -361,12 +361,12 @@
361361
"collapsed": true
362362
},
363363
"source": [
364-
"# for 循环 \n",
364+
"# 3. for 循环 \n",
365365
"for 循环是一个通用的序列迭代器:可以遍历任何有序的序列对象内的元素。 \n",
366366
"\n",
367367
"for 语句可用于字符串、列表、元组、其他内置可迭代对象以及通过类所创建的新对象。 \n",
368368
"\n",
369-
"## 一般格式 "
369+
"## 3.1 一般格式 "
370370
]
371371
},
372372
{
@@ -377,16 +377,18 @@
377377
},
378378
"outputs": [],
379379
"source": [
380-
"for <target> in <object>:\n",
381-
" <statements1>\n",
380+
"for <target> in <object>: # 将 object 中的项赋值给 target\n",
381+
" <statements1> # 重复主体:使用 target\n",
382382
"else:\n",
383-
" <statements2>"
383+
" <statements2> # 如果没遇到 'break'"
384384
]
385385
},
386386
{
387387
"cell_type": "markdown",
388388
"metadata": {},
389389
"source": [
390+
"当 Pytorch 运行 for 循环时,会逐个将序列对象中的元素赋值给目标,然后为每个元素执行循环主体。 \n",
391+
"\n",
390392
"for 语句也支持一个选用的 else 块,就像在 while 循环中一样。 \n",
391393
"\n",
392394
"**基本应用**"
@@ -456,7 +458,7 @@
456458
"source": [
457459
"S = 'lumberjack'\n",
458460
"T = ('and', \"I'm\", 'okay')\n",
459-
"for x in S: print(x, end=' ')"
461+
"for x in S: print(x, end=' ') # 迭代字符串"
460462
]
461463
},
462464
{
@@ -473,7 +475,7 @@
473475
}
474476
],
475477
"source": [
476-
"for x in T: print(x, end=' ')"
478+
"for x in T: print(x, end=' ') # 迭代元组"
477479
]
478480
},
479481
{
@@ -501,7 +503,8 @@
501503
],
502504
"source": [
503505
"T = [(1, 2), (3, 4), (5, 6)]\n",
504-
"for (a, b) in T: print(a, b)"
506+
"for (a, b) in T:\n",
507+
" print(a, b)"
505508
]
506509
},
507510
{
@@ -571,7 +574,7 @@
571574
],
572575
"source": [
573576
"for (key, value) in D.items():\n",
574-
" print(key, '=>', value)"
577+
" print(key, '=>', value) # 迭代键和值"
575578
]
576579
},
577580
{
@@ -599,10 +602,17 @@
599602
"source": [
600603
"T = [(1, 2), (3, 4), (5, 6)]\n",
601604
"for both in T:\n",
602-
" a, b = both\n",
605+
" a, b = both # 手动赋值\n",
603606
" print(a, b)"
604607
]
605608
},
609+
{
610+
"cell_type": "markdown",
611+
"metadata": {},
612+
"source": [
613+
"嵌套结构也能够自动解包:"
614+
]
615+
},
606616
{
607617
"cell_type": "code",
608618
"execution_count": 10,
@@ -647,7 +657,7 @@
647657
}
648658
],
649659
"source": [
650-
"a, *b, c = (1, 2, 3, 4)\n",
660+
"a, *b, c = (1, 2, 3, 4) # 扩展序列赋值\n",
651661
"a, b, c"
652662
]
653663
},
@@ -760,18 +770,18 @@
760770
"seq1 = 'spam'\n",
761771
"seq2 = 'scam'\n",
762772
"\n",
763-
"res = []\n",
764-
"for x in seq1:\n",
765-
" if x in seq2:\n",
766-
" res.append(x)\n",
773+
"res = [] # 从空列表开始\n",
774+
"for x in seq1: # 扫描第一个序列\n",
775+
" if x in seq2: # 是否是共同项\n",
776+
" res.append(x) # 添加结果到列表\n",
767777
"res"
768778
]
769779
},
770780
{
771781
"cell_type": "markdown",
772782
"metadata": {},
773783
"source": [
774-
"# 编写循环的技巧 \n",
784+
"# 4. 编写循环的技巧 \n",
775785
"一般而言,for 比 while 容易写,执行时也比较快。 \n",
776786
"\n",
777787
"有时需要以更为特定的方式来进行迭代。 \n",
@@ -781,7 +791,7 @@
781791
"- 内置 zip 函数返回并行元素的元组的列表,可用于在 for 中遍历数个序列。\n",
782792
"- 内置 enumerate 函数在迭代器中生成元素的值和索引,因此不必手动计数。\n",
783793
"\n",
784-
"## 循环计数器:range \n",
794+
"## 4.1 循环计数器:range \n",
785795
"range 常用在 for 循环中来产生索引,但也可以用在任何需要整数列表的地方。 \n",
786796
"\n",
787797
"在 Python 3.X 中,range 是一个迭代器,会根据需要产生元素,因此,我们需要将其包含到一个 list 调用中以一次性显示其结果:"
@@ -933,7 +943,7 @@
933943
"source": [
934944
"在可能的情况下,最好使用 Python 中的简单的 for 循环,不要用 while, 并且不要在 for 循环中使用 range 调用,只将其视为最后的手段。 \n",
935945
"\n",
936-
"## 序列排列:range 和 len \n",
946+
"## 4.2 序列排列:range 和 len \n",
937947
"一些算法可以使用序列重排序——在搜索中生成替代选择,来测试不同的值排序的效果。这种情况可能需要偏移量,以便将序列分开并将它们重新放在一起。range 在第一个例子中提供重复计数,在第二个例子提供切片的位置:"
938948
]
939949
},
@@ -952,8 +962,8 @@
952962
],
953963
"source": [
954964
"S = 'spam'\n",
955-
"for i in range(len(S)):\n",
956-
" S = S[1:] + S[:1]\n",
965+
"for i in range(len(S)): # 重复 0-3\n",
966+
" S = S[1:] + S[:1] # 将头部项移到尾部\n",
957967
" print(S, end=' ')"
958968
]
959969
},
@@ -972,7 +982,7 @@
972982
],
973983
"source": [
974984
"for i in range(len(S)):\n",
975-
" X = S[i:] + S[:i]\n",
985+
" X = S[i:] + S[:i] # 后面部分 + 前面部分\n",
976986
" print(X, end=' ')"
977987
]
978988
},
@@ -1007,7 +1017,7 @@
10071017
"cell_type": "markdown",
10081018
"metadata": {},
10091019
"source": [
1010-
"## 非完备遍历:range和分片 \n",
1020+
"## 4.3 非完备遍历:range和分片 \n",
10111021
"前面部分中 range/len 组合的情况是很有用的应用。我们也可以使用这个技术来跳过一些元素:"
10121022
]
10131023
},
@@ -1089,7 +1099,7 @@
10891099
"cell_type": "markdown",
10901100
"metadata": {},
10911101
"source": [
1092-
"## 修改列表:range 和表达式 \n",
1102+
"## 4.4 修改列表:range 和表达式 \n",
10931103
"可以使用 range/len 和 for 组合的常见场合就是在循环中遍历列表时对齐进行修改。例如,假设你因某种理由要为列表中每个元素都加1。可以通过简单的 for 循环来做,但可能给并不是你想要的。"
10941104
]
10951105
},
@@ -1112,7 +1122,7 @@
11121122
"source": [
11131123
"L = [1, 2, 3, 4, 5]\n",
11141124
"for x in L:\n",
1115-
" x += 1\n",
1125+
" x += 1 # 改变 x,而不是 L\n",
11161126
"L"
11171127
]
11181128
},
@@ -1161,7 +1171,7 @@
11611171
],
11621172
"source": [
11631173
"L = [1, 2, 3, 4, 5]\n",
1164-
"for i in range(len(L)):\n",
1174+
"for i in range(len(L)): # 对 L 中的每一项加 1\n",
11651175
" L[i] += 1\n",
11661176
"L"
11671177
]
@@ -1204,7 +1214,7 @@
12041214
"cell_type": "markdown",
12051215
"metadata": {},
12061216
"source": [
1207-
"## 并行遍历:zip 和 map \n",
1217+
"## 4.5 并行遍历:zip 和 map \n",
12081218
"在基本运算中,zip 会取得一个或多个序列为参数,然后返回元组的列表,将这些序列中的并排的元素配成对。 \n",
12091219
"\n",
12101220
"和 range 一样,zip 在 Python 3.X 中也是一个可迭代对象,因此,我们必须将其包含在一个 list 调用中以便一次性显示所有结果。"
@@ -1286,7 +1296,7 @@
12861296
"source": [
12871297
"zip 可以接受任何类型的序列(包括文件),并且可以由两个以上的参数。 \n",
12881298
"\n",
1289-
"对于三个参数,它构建了3元素元组的一个列表,其中带有来自每个序列的元素,基本上按照列对应。"
1299+
"对于三个参数,它构建了 3 元素元组的一个列表,其中带有来自每个序列的元素,基本上按照列对应。"
12901300
]
12911301
},
12921302
{
@@ -1307,7 +1317,7 @@
13071317
],
13081318
"source": [
13091319
"T1, T2, T3 = (1, 2, 3), (4, 5, 6), (7, 8, 9)\n",
1310-
"list(zip(T1, T2, T3))"
1320+
"list(zip(T1, T2, T3))"
13111321
]
13121322
},
13131323
{
@@ -1370,12 +1380,34 @@
13701380
"D3"
13711381
]
13721382
},
1383+
{
1384+
"cell_type": "code",
1385+
"execution_count": 1,
1386+
"metadata": {},
1387+
"outputs": [
1388+
{
1389+
"data": {
1390+
"text/plain": [
1391+
"{'spam': 1, 'eggs': 3, 'toast': 5}"
1392+
]
1393+
},
1394+
"execution_count": 1,
1395+
"metadata": {},
1396+
"output_type": "execute_result"
1397+
}
1398+
],
1399+
"source": [
1400+
"keys = ['spam', 'eggs', 'toast']\n",
1401+
"vals = [1, 3, 5]\n",
1402+
"{k: v for (k, v) in zip(keys, vals)}"
1403+
]
1404+
},
13731405
{
13741406
"cell_type": "markdown",
13751407
"metadata": {},
13761408
"source": [
1377-
"## 产生偏移和元素:enumerate \n",
1378-
"在有些程序中,我们需要用到元素以及这个元素的偏移值。enumerate函数可以为我们做这件事"
1409+
"## 4.5 产生偏移和元素:enumerate \n",
1410+
"在有些程序中,我们需要用到元素以及这个元素的偏移值。enumerate 函数可以为我们做这件事"
13791411
]
13801412
},
13811413
{
@@ -1525,7 +1557,7 @@
15251557
"name": "python",
15261558
"nbconvert_exporter": "python",
15271559
"pygments_lexer": "ipython3",
1528-
"version": "3.6.3"
1560+
"version": "3.6.5"
15291561
}
15301562
},
15311563
"nbformat": 4,

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /