圆形Python列表项,每个项的小数点不同

时间:2019-02-01 08:41:08

标签: python python-3.x list tuples rounding

我使用Python 3.6.4

我有一门课,我在其中计算一堆属性。我必须将所有这些取整到不同的小数位,其中一些可以为无。

示例:

假设我具有以下属性,值,小数位

a, 1.155 , 0
b, 1.123 , 2
c, None  , 1
...

因此我需要的是

a= 1.2
b= 1.23
c= None
...

临时解决方案

我去寻找每个属性,然后四舍五入

if attribute is not None:
    attribute = round(attribute, decimal_places)

但是我的属性太多了。

我尝试过的事情:

我列出了一个元组列表(属性,小数位数)。像这样:

attributes_decimal_places =  [
            (self.a, 0),
            (self.b, 2),
            (self.c, 1),
]

在此列表中,我可以运行以下命令,该命令为我提供了正确的四舍五入值,但我无法将此结果值保存在属性中

solution = [round(x[0], x[1]) if isinstance(x[0], float) else x[0] for x in attributes_decimal_points]

问题:

如何将舍入后的值放入属性而不是列表中?

解决方案:

感谢所有回答的人。一个对我来说很好的解决方案:

    attributes_decimal_points = [
        (self.a, "a", 1),
        (self.b, "b", 2),
        (self.c, "c", 3)
    ]

    for attribute in attributes_decimal_points:
        if attribute[0] is None:
            continue
        else:
            setattr(self, attribute[1], round(attribute[0], attribute[2])) 

1 个答案:

答案 0 :(得分:0)

您可以使用字典:

    solution = {}
    for x in attributes_decimal_points:
        if isinstance(x[0], float):
            solution.update({x[0]: round(x[0], x[1])})
        else:
            solution.update({x[0]: x[1]})

这样,您可以通过属性名称获取属性。