range函数是从0开始吗,python中range(0)

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: