【问题标题】:I want to generate a for loop using decimals. I need the y value from the loop to create a list. This is a project and I cant use numpy我想使用小数生成一个 for 循环。我需要循环中的 y 值来创建一个列表。这是一个项目,我不能使用 numpy
【发布时间】:2021-12-21 05:55:52
【问题描述】:

float 对象不能被解释为整数

我想使用小数生成一个 for 循环。我需要循环中的y 值来创建list。 这是一个项目,我不能使用numpy

在解决这个问题上有什么替代方法吗?

value1value2interval都是float

for i in range ( value1 , value2 , interval):

【问题讨论】:

  • 你为这个项目付出了哪些努力?此处不提供项目解决方案。你可以试试 ´range(len(value))´

标签: python for-loop floating-point integer


【解决方案1】:

这是对浮点范围函数的幼稚实现:

def float_range(start, stop, step):
    if step > 0:
        while start < stop:
            yield start
            start += step
    else:
        while start > stop:
            yield start
            start += step

注意所有caveats of floating point math 都适用。

【讨论】:

  • 是否可以使用round 来限制浮点数学的不准确性?因此例如将每个结果四舍五入到小数点后仅两位(或用户给定)数字,并将该四舍五入的值用于下一次计算等等,因为浮点不准确性是如此之小,这应该在一定程度上减少它
  • 如果你想这样,你应该使用deimal.Decimal而不是浮点数
  • 在整个循环中计算运行的部分总和将累积舍入误差,导致总和随着循环的进行逐渐(平均)偏离理想总和。它还可能导致终止条件未在所需点触发。迭代浮点计数器的惯用方法是维护一个整数计数器并在每次迭代中从它计算一个浮点值。
【解决方案2】:
import itertools

def seq(start, end, step):
    assert (step != 0)
    sample_count = int(abs(end - start) / step)
    return itertools.islice(itertools.count(start, step), sample_count)

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
  • sample_count = int(abs(end - start) / step) 不会总是产生所需的样本计数,因为浮点运算中的舍入。
  • 来自itertools.count"使用浮点数进行计数时,有时可以通过替换乘法代码来获得更好的精度,例如:(start + step * i for i in count())"
  • 不要犹豫修改我的代码。请投稿
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-21
  • 2021-10-16
  • 1970-01-01
相关资源
最近更新 更多