range() 函数
《红楼梦》,又名《石头记》,实际上是一颗神石在人间游历的故事。而这块石头,就是我们的主人公贾宝玉。神石在投胎成宝玉前,向茫茫大士和渺渺真人讲起了自己的故事:
女娲氏炼石补天之时,于大荒山无稽崖炼成高十二丈、见方二十四丈大的顽石三万六千五百零一块。那娲皇只用了三万六千五百块,单单剩下一块未用,弃在青埂峰下。
这剩下的最后一块,自然就是这神石了……
女娲娘娘神通广大,创造了 36501
块石头。如果我们用列表来记录这些石头,大概就要写成:
stones = [1, 2, 3, 4, ..., 36500, 36501]
且慢,我们真的要手动输入这么多数字吗?(゜ ▽ ゜;) 能不能像女娲娘娘那样用神力瞬间完成呢?
当然啦!可以用 range()
函数实现,快速生成一个有规律的数字序列。该函数的基本格式为 range(start, stop, step)
,返回一个 range
对象,要用 list()
函数转换成列表。
range(start, stop, step)
计数从start开始,默认从1 开始 range(1, 5) :从1开始5结束不包含5
计数从stop结束,单不包括stop range(11) :从0开始 11结束(不包含11)
奇数的间隔,不填默认为1 range(0, 30, 5) 从0开始,30结束(不包含30),隔5
range()
函数最多支持 3 个参数,start
参数是起始元素,stop
参数是结束元素,step
是步长,也就是计数的间隔。其中 start
和 step
是可选的,分别默认为 0
和 1
,比如 list(range(3))
可以快速生成 [0, 1, 2]
列表。
提示:如果你已经设好了
stop
参数和step
参数的值,那start
参数也必须填写哦!
# start 为 2, stop 为 5,步长默认为 1
list1 = list(range(2, 5))
print(list1)
# 输出:[2, 3, 4]
# start 为 1, stop 为 9,步长为 2
list2 = list(range(1, 9, 2))
print(list2)
# 输出:[1, 3, 5, 7]
# start 为默认值 0, stop 为 3,步长默认为 1
list3 = list(range(3))
print(list3)
# 输出:[0, 1, 2]
聪明的你一定已经发现,range()
的取值逻辑,和列表的切片是一样的, 选取范围包括起始位置,却不包括结束位置。这也是和我们之前说的切片设计逻辑是一样的道理,方便我们快速看出范围的元素数目。
好了,了解了 range()
生成数字序列的逻辑,我们就来创造这 36501
块补天石吧。在看下面的代码前,先自己想一想,range()
的三个参数要怎么填。
# 起始为 1, 结束为 36502(36501向后一位),步长默认为 1
stones = list(range(1, 36502))
# 列表太长,我们不打印内容了,直接打印列表长度、第一个元素和最后一个元素。
print('共有' + str(len(stones)) + '个元素')
print('第一个元素是' + str(stones[0]))
print('最后一个元素是' + str(stones[-1]))
# 输出:
# 共有36501个元素
# 第一个元素是1
# 最后一个元素是36501
range(start, stop, step)
中,一定要记得 stop
参数是 最后一个截取数字 + 1。要是上面的代码写成 range(1, 36501)
,那宝玉这最后一块石头就造不出来,也没有我们《红楼梦》的精彩故事啦。
练习:
修改下列代码中 range()
函数中的 ???,使其运行结果打印出所有 大于等于 0,小于等于 100 且可以 被 3 整除 的自然数。
three_divided = list(range(???))
print(three_divided)
显然很简单:
three_divided = list(range(0,101,3))
print(three_divided)