python 流程控制——range 函数的使用

这次出于疏忽,忘记在晚上断网之前打开 python 中文教程的页面了,11 点实在是早,也不想干别的,也就是想学学 python,还好我手头上有保存一份官方的英文教程,就拿出来看了。

虽然以前玩游戏经常都是看英语,当时也很喜欢英语,不过现在觉得英语看的多了眼花,实在是没有咱们简体中文这种舒服的感觉,方方正正的,果然汉字还是很好看,哈哈!

本人承认本人英语并不是很好很好,只是刚好过了个 CET-4 的水平,计算机英语的水平也是靠积累来的。

就这样,看了下英文版的官方文档,居然有了重大发现!

某 pythondoc 的官方教程翻译版对于 range 的说法和这个 python 官方原版英文教程的说法不一样!

人家官方说 range 函数只是生成一个列表,那边的中文翻译居然说是生成一个链表。。。。

果然还是看原版教程才不会被坑啊。。。

不废话了,讲讲正题。

range 这个函数可以一次性生成一个数值序列列表,列表里的数值依次递增

比如这样

1
2
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

看着这玩意,再想想前面的 for 循环和 while 循环,貌似发现了什么

果然,人家官方教程讲出来了,这玩意解决了 foreach 语句的计数器问题

1
2
3
4
5
6
7
8
9
10
11
>>> a = ['Mary', 'had', 'a', 'little', 'lamb']
>>> a
['Mary', 'had', 'a', 'little', 'lamb']
>>> for i in range(len(a)):
... print i, a[i]
...
0 Mary
1 had
2 a
3 little
4 lamb

原来一直以为 foreach 语句的最大弊端是不能够控制计数变量,所以在 java 里面就算有这个语句也基本不用,但是 python 很好的解决了这个问题。

range 函数还可以生成等差数列

1
2
>>> range(0, 15, 2)
[0, 2, 4, 6, 8, 10, 12, 14]

进而可以很轻松的就进行这样的特殊操作

1
2
3
4
5
6
7
8
9
>>> a = 'abcdefghijklmn'
>>> for i in range(0, len(a), 3):
... print i, a[i]
...
0 a
3 d
6 g
9 j
12 m

range 函数生成的列表不一定要从零开始哦

1
2
>>> range(5, 14)
[5, 6, 7, 8, 9, 10, 11, 12, 13]

这样,就可以总结出三个 range 函数的三种参数形式了
range(length)

range(start, length)

range(start, length, delta)

不管怎么说,这个 range 函数我感觉真的是 python 的一个让我眼前一亮的东西,配合循环一起食用效果更佳!

附上一个自己写的用来玩的简单冒泡排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
>>> a = [5, 4, 7, 2, 6, 3, 1, 8]
>>> for i in range(len(a)-1):
... for j in range(len(a)-1-i):
... if a[j] > a[j+1]:
... t = a[j+1]
... a[j+1] = a[j]
... a[j] = t
... print a
...
[4, 5, 7, 2, 6, 3, 1, 8]
[4, 5, 2, 7, 6, 3, 1, 8]
[4, 5, 2, 6, 7, 3, 1, 8]
[4, 5, 2, 6, 3, 7, 1, 8]
[4, 5, 2, 6, 3, 1, 7, 8]
[4, 2, 5, 6, 3, 1, 7, 8]
[4, 2, 5, 3, 6, 1, 7, 8]
[4, 2, 5, 3, 1, 6, 7, 8]
[2, 4, 5, 3, 1, 6, 7, 8]
[2, 4, 3, 5, 1, 6, 7, 8]
[2, 4, 3, 1, 5, 6, 7, 8]
[2, 3, 4, 1, 5, 6, 7, 8]
[2, 3, 1, 4, 5, 6, 7, 8]
[2, 1, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8]