同时舍入列表中的单独值

时间:2012-03-09 07:55:13

标签: python rounding

我想写一些看起来有点像我目前在以下定义中的内容:

def rounding( sp1, sp2, sp3, sp4 ):

    if () <= 700.:
        round(object, -1)
    elif () <= 1000.:
        round(object, (-1*5))
    elif () <= 10000.:
        round(object, -2)
    elif () > 10000.:
        round(object, -3)
    else:
        print "Error"

    return [ sp1, sp2, sp3, sp4 ]

我真的是所有这一切的初学者,我可能在上面的代码中犯了一些可怕的错误。我基本上已经计算了这4个值sp1,sp2等。然后我希望能够同时对这些值进行舍入,但是根据它们各自的值,它们必须以不同的数量舍入。

If 'sp' <= 700 : rounded to nearest 10
700 < sp <= 1000 : rounded to nearest 50
1000 < sp <= 10000 : rounded to nearest 100
10000 < sp : rounded to nearest 1000. (not code)

如果有什么事可以帮助我,我将非常感激,谢谢!

2 个答案:

答案 0 :(得分:2)

棘手的部分是四舍五入到最接近的50.这可以通过将数字加倍,然后四舍五入到最接近的100,然后再次将数字减半来实现。至少这是我能想到的最简单的方式。

def nearest_50(n):
    return round(n*2, -2)/2

至于其他方面,您的代码离正确的解决方案并不遥远。正如Ignacio建议的那样,你应该一次只舍入一个值

def my_round(n):
    if n <= 700:
        return round(n, -1)
    elif n <= 1000:
        return nearest_50(n)
    elif n <= 10000:
        return round(n, -2)
    else:
        return round(n, -3)

然后围绕这样的数字列表

mylist = [... some numbers ...]
rounded = [my_round(n) for n in mylist] 

答案 1 :(得分:0)

编写一个对单个值进行舍入的函数,然后使用列表推导将所有值一次传递给它。