range函数是从0开始吗,python中range(0)
python()函数是一个step函数,可以快速优雅地创建整数列表,一般用在for循环中。但是python自己的range()步进函数只支持整数类型,不支持浮点数。然后为了支持浮点数,只能自定义一个函数。
1.Python内置函数range()的语法
范围(开始、停止[、步进])
1.1.参数说明:start:从start开始计数。默认情况下,它从0开始。比如range(5)等价于range (0,5);
停止:计数到停止结束,但不包括停止。例如:range (0,5)是没有5的[0,1,2,3,4]
步长:步长,默认为1。例如,range (0,5)等效于range(0,5,1)
1.2、运行实例
列表(范围(2,98,3))
[2, 5, 8, 11, 14, 17, 20, 23, 26, 29, 32, 35, 38, 41, 44, 47, 50, 53, 56, 59, 62, 65, 68, 71, 74, 77, 80, 83, 86, 89, 92, 95]
2.自定义支持浮动的步进函数。
2.1、功能要求
输入输入:
Start (float):从Start开始计数。默认情况下,它从0开始。
End (float):计数到stop的结尾,但不包括stop。
Step (float):步长,默认为1。如果是浮点数,参考步骤的小数位数。
输出:
浮点数据类型列表
根据上面的功能需求,我的想法是用原来的range函数,只支持整数。然后,需要将step的浮点数据转换为整数类型。这不是简单的弃小数取整数,而是将小数部分乘以一个合适的10**n(n是小数部分的位数),将浮点数整体转换成整数。
2.2、取步骤的小数位数。
2.2.1、试错1-使用简单的算术运算
导入数学
b=math.modf(5.02)
b
(0.019999999999999574, 5.0)
b[0]
0.019999999999999574
浮点型(5.02)-整型(5.02)
0.019999999999999574
5.02 - int(5.02)
0.019999999999999574
显然,由于Python中浮点数的精度问题,我们无法用简单的算术方法得到精确的小数位数。
2.2.2,试错2-十进制模块
导入小数
十进制。十进制(5.02)
十进制( 5.019999999999957367435854393988847325394545353125 )
十进制。十进制(5.02)-十进制。十进制(5)
十进制( 0.01999999999957367435854394 )
可惜这个小数部分会自动变长,达不到你自己的要求。getcontext()。decimal模块类型的prec可以设置有效的小数位数,但它不能读取给定浮点数的小数位数。所以这个模块解决不了自己的问题。
2.2.3.将浮点数转换成字符串。
str(48.36)。索引( . ))
2
len(字符串(48.36))
五
Len (str (48.36))-1-str (48.36)。索引( . ))# 1这里减去是因为小数点也占一位。
2 #获取小数位数
2.3.自定义支持浮动的步进功能。
def float_range(开始、停止、步进):
步进功能输入支持浮点输入:start(浮点):计数从start开始。默认情况下,它从0开始。End (float):计数到stop的结尾,但不包括stop。Step (float):步长,默认为1。如果是浮点数,参考步骤的小数位数。输出:浮点列表示例:print (float _ range (3.612,5.78,0.22)) [3.612,3.832,4.052,4.272,4.492,4.712,4.932,5.152,5.372]
start _ digit=len(str(start))-1-str(start)。索引( . ))#取起始参数的小数点位置
stop _ digit=len(str(stop))-1-str(stop)。索引( . ))#取结束参数的小数点位置
step _ digit=len(str(step))-1-str(step)。索引( . ))#取步长参数的小数位
Digit=max (start _ digit,stop _ digit,step _ digit) #取小数位数的最大值。
return[(start * 10 * * digit I * step * 10 * * digit)/10 * * digit for I in range(int((stop-start)//step))]
另一个更简单的选择。
如果你按照我的思路,理解了这些内容,那么最后一个float_range函数其实是有一些多余的内容的。只要您可以在需求中忽略小数的精度,那么您就可以使用以下函数:
def float_range(开始、停止、步进):
步进功能输入支持浮点输入:start(浮点):计数从start开始。默认情况下,它从0开始。End (float):计数到stop的结尾,但不包括stop。Step (float):步长,默认为1。如果是浮点数,参考步骤的小数位数。输出:浮点列表示例:print (float _ range (3.612,5.78,0.22)) [3.612,3.83200000000000005,4.272,4.492,4.712,4.40000
return[start I * step for I in range(int((stop-start)//step))]
其实这个功能的实现只需要最后的列表推导,但是列表中浮点数的小数精度可能就差强人意了。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。