42. range函数—生成器函数
文章目录
- 42. range函数—生成器函数
- 1. 什么是range( )函数
- 2. 回顾列表切片的语法
- 3. range( )函数的语法
- 3. range函数实操
- 3.1 只有1个参数
- 3.2 有2个参数
- 3.3 有3个参数
- 3.4 步长为负数
- 4. list不能完全替代range
- 5. 总结
1. 什么是range( )函数
range[reɪndʒ]:按一定的次数排列。
range的中文意思是按一定的次数排列。
range( )函数:Python中的生成器函数。
range( )函数在Python中的作用是生成一个新的range对象。
【温馨提示】
什么是生成器函数、什么是对象就是Python中的一个概念,就是一个定义,初学不用过多纠结。
初学者重点掌握range函数的语法即可。
什么是对象,后面的内容会讲。
2. 回顾列表切片的语法
列表[star:end:step]
列表[开始字符:结束字符:步长]
列表切片取值语法由4部分构成:
-
列表名。
-
英文中括号。
-
3个参数。
-
3个参数之间用英文冒号分隔。
# 新建一个str列表
str_list = ["当归", "人参", "黄芪", "红枣", "枸杞", "天麻", "山楂"]
# 用切片从列表中取值
print(str_list[0:4:2])
# type函数查看列表切片取值的数据类型
print("列表切片取值得到的数据类型仍然是列表:", type(str_list[0:4:2]))
【终端输出】
['当归', '黄芪']
列表切片取值得到的数据类型仍然是列表: <class 'list'>
【0:4:2代码解析】
start=0即开始元素的索引为0,索引0对应列表的第1个元素,即元素当归
。
end=4即结束元素的索引为4,索引4对应列表的第5个元素,即元素枸杞
注意切片的语法:含前不含后
,即含开始元素,不含结束元素枸杞
。
step=2即步长为2,步长为2可以理解成一次性向前走2步,那就是要跳过1个字符。
3. range( )函数的语法
【列表切片和range函数的区别】
列表切片用英文中括号[]
,range函数用英文圆括号()
。
列表切片的3个参数用英文冒号:
分隔。
range函数的3个参数用英文逗号,
分隔。
列表[star:end:step]
range(star,end,step)
【range( )函数的语法如下】
range(开始字符,结束字符,步长)
range( )函数由4部分组成:
-
函数名:
range
-
英文小括号:
( )
-
3个参数
-
3个参数之间用英文逗号
,
分隔
【参数说明】
-
参数start:表示起始的整数(包含该整数),如果不指定,则默认为
0
。 -
参数end:表示结束的整数(不包含该整数),不能省略。
-
参数step:表示步长,即两个数之间的间隔。如果省略,则默认为1,当省略该步长时,最后一个英文逗号也可以省略。
【重点提示】
切片和range函数都包括开始字符,不包括结束字符,简单记忆为含前不含后
。
【返回值】
range函数返回的是一个range对象。
我们可以利用list函数将range对象转换成列表。
我们可以利用tuple函数将range对象转换成元组。
【温馨提示】
range函数不能直接生成列表或元组,必需利用list、tuple函数将其转换成列表或元组。
3. range函数实操
3.1 只有1个参数
# 创建一个range 函数,将结果赋值给变量r
r = range(3)
# 输出r
print(r)
# 用type函数查看r的数据类型
print(type(r))
# 用list函数将range对象转换为列表
print(list(r))
# 用tuple函数将range对象转换为元组
print(tuple(r))
【终端输出】
range(0, 3)
<class 'range'>
[0, 1, 2]
(0, 1, 2)
【range(3)代码解析】
这里只有1个参数3
。
只有1个参数表示从整数0开始,步长为1。
start=0
end=3
step=1,即步长为1
【代码解析:返回值】
我们用type函数查看数据类型,返回的是<class 'range'>
,即是一个range对象。
我们利用list将其转换成列表,我们可以发现列表中的元素就是一个数学中的等差数列。
为了方便理解,我们可以认为range函数在list函数的作用下,创建的就是一个等差数列。
数列的公差就是步长。
3.2 有2个参数
# 创建一个range 函数,将结果赋值给变量r
r = range(2,5)
# 输出r
print(r)
# 用type函数查看r的数据类型
print(type(r))
# 用list函数将range对象转换为列表
print(list(r))
【终端输出】
range(2, 5)
<class 'range'>
[2, 3, 4]
【range(2,5)代码解析】
start=2,从2开始,包含2。
end=5,到5结束,不包含5。
step=1,步长为1。
因此输出结果为2,3,4。
3.3 有3个参数
# 创建一个range 函数,将结果赋值给变量r
r = range(2,11,3)
# 输出r
print(r)
# 用type函数查看r的数据类型
print(type(r))
# 用list函数将range对象转换为列表
print(list(r))
【终端输出】
range(2, 11, 3)
<class 'range'>
[2, 5, 8]
【range(2,11,3)代码解析】
start=2,从2开始,包含2。
end=11,到11结束,不包含11。
step=3,步长为3,也可以理解为公差为3的等差数列。
第1个数为2。
第2个数为2+3=5。
第3个数为5+3=8。
第4个数为8+3=11。(不包含)
因此输出列表中有2,5,8三个数。
3.4 步长为负数
# 创建一个range 函数,将结果赋值给变量r
r = range(15,0,-5)
# 输出r
print(r)
# 用type函数查看r的数据类型
print(type(r))
# 用list函数将range对象转换为列表
print(list(r))
【终端输出】
range(15, 0, -5)
<class 'range'>
[15, 10, 5]
【range(15,0,-5)代码解析】
start=15,从15开始,包含15。
end=0,到0结束,不包含0。
step=-5,步长为-5,也可以理解为公差为-5的等差数列。
第1个数为15。
第2个数为15-5=10。
第3个数为10-5=5。
第4个数为5-5=0。(不包含)
因此输出列表中有15,10,5三个数。
4. list不能完全替代range
range函数和list函数最终都能生成一个列表,但两个函数各有优缺点。
# 创建一个整数列表
int_list = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]
print(int_list)
r=range(20)
print(list(r))
【终端输出】
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
观察上面的代码,我们发现用range函数创建一个有规律的整数列表更为便捷。
list函数需要写20个元素,但range函数最多写3个参数就可以完成。