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

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

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

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

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

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

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


不废话了,讲讲正题。



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

比如这样

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

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


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

>>> 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函数还可以生成等差数列

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

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

>>> 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函数生成的列表不一定要从零开始哦

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

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

range(length)

range(start, length)

range(start, length, delta)


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


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

>>> 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]