【问题标题】:Rounding up a list within certain boundaries在特定范围内对列表进行四舍五入
【发布时间】:2021-04-29 19:23:16
【问题描述】:

我有一个数字列表,我希望以某种方式将其转换为单位步进形式

这些是我的界限

[367.3090551181102, 371.73179133858264, 376.1545275590551, 380.5772637795276, 385.0]

这是我的数据

[367.3090551181102, 370, 370, 370, 370, 370, 370, 370, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 368, 369, 368, 368, 368, 368, 368, 368, 368, 368, 369, 370, 367.3090551181102, 367.3090551181102, 367.3090551181102, 370, 368, 373, 369, 371, 368, 367.3090551181102, 367.3090551181102, 367.3090551181102, 369, 367.3090551181102, 372, 367.3090551181102, 368, 368, ...]

我想要做的是基本上将数据中的每个数字向下或向上舍入到边界。数字在下边界和上边界之间。

假设数字是 370,我想将它四舍五入到 371.73... 因为它在 367.309... 和 371.73... 之间,或者数字是 381,那么我想将它四舍五入到 370.57...

这是我的代码,但我有点困惑

def unit_step(data,boundaries):
    us = []
    for d in data:
        if(boundaries[0] < d < boundaries[1]):
            us.append(rounder(boundaries[0],boundaries[1],d))
        elif(boundaries[1] < d < boundaries[2]):
            us.append(rounder(boundaries[1],boundaries[2],d))
        elif(boundaries[2] < d < boundaries[3]):
            us.append(rounder(boundaries[2],boundaries[3],d))
        elif(boundaries[3] < d < boundaries[4]):
            us.append(rounder(boundaries[3],boundaries[4],d))
    return us

我在另一个 for 循环中尝试了 for 循环,但没有成功。

我哪里错了,或者与双循环相比它是一种有用的方法吗?

【问题讨论】:

标签: python list for-loop


【解决方案1】:

您可以使用带有min 的列表推导来检查boundaries 中最接近(较高 较低)的值,并相应地替换data 中的值

>>> [min(boundaries, key=lambda i: abs(i - value)) for value in data]
[367.3090551181102, 371.73179133858264, 371.73179133858264, 371.73179133858264, 371.73179133858264, 371.73179133858264, 371.73179133858264, 371.73179133858264, 367.3090551181102, 367.3090551181102, 367.3090551181102, 367.3090551181102, 367.3090551181102, 367.3090551181102, 367.3090551181102, 367.3090551181102, 367.3090551181102, 367.3090551181102, 367.3090551181102, 367.3090551181102, 367.3090551181102, 367.3090551181102, 367.3090551181102, 367.3090551181102, 367.3090551181102, 367.3090551181102, 367.3090551181102, 367.3090551181102, 367.3090551181102, 367.3090551181102, 367.3090551181102, 371.73179133858264, 367.3090551181102, 367.3090551181102, 367.3090551181102, 371.73179133858264, 367.3090551181102, 371.73179133858264, 367.3090551181102, 371.73179133858264, 367.3090551181102, 367.3090551181102, 367.3090551181102, 367.3090551181102, 367.3090551181102, 367.3090551181102, 371.73179133858264, 367.3090551181102, 367.3090551181102, 367.3090551181102]

【讨论】:

    猜你喜欢
    • 2019-05-18
    • 2022-12-11
    • 2019-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多