【问题标题】:Round list, list of lists, numpy array or other structure maintaining its structure圆形列表、列表列表、numpy 数组或其他维护其结构的结构
【发布时间】:2021-07-30 11:15:21
【问题描述】:

是否有一些函数可以对列表、列表列表或 numpy 数组进行舍入,并输出同一对象的舍入版本。 np.round(参见例如 https://stackoverflow.com/a/46994452/7238575)很接近,但如果它是一个列表,它会将一个对象更改为一个 numpy 数组。我想要一个保留数据类型的通用舍入函数。

【问题讨论】:

    标签: python list numpy rounding


    【解决方案1】:

    您可以从 deepcopy 的某些实现开始,并修改它在达到奇异值时的作用。

    深拷贝实现基于:Implementing a copy.deepcopy() clone function

    def deepRound(data, ndigits):
        if isinstance(data, dict):
            result = {}
            for key, value in data.items():
                result[key] = deepRound(value, ndigits)
    
            assert id(result) != id(data)
    
        elif isinstance(data, list):
            result = []
            for item in data:
                result.append(deepRound(item, ndigits))
    
            assert id(result) != id(data)
    
        elif isinstance(data, tuple):
            aux = []
            for item in data:
                aux.append(deepRound(item, ndigits))
            result = tuple(aux)
    
            assert id(result) != id(data)
    
        elif isinstance(data, set):
            aux = []
            for item in data:
                aux.append(deepRound(item, ndigits))
            result = set(aux)
    
            assert id(result) != id(data)
    
        elif isinstance(data, (int, float)):
            result = round(data, ndigits)
        else:
            raise ValueError("Unsupported data type: {}".format(type(data)))
    
        return result
    

    正如所写,它处理用于集合的列表、字典、集合和元组以及用于舍入的整数和浮点数。如果您需要处理其他类型,则必须将它们添加到上述实现中或为该函数实现一些通用接口。

    【讨论】:

      猜你喜欢
      • 2021-12-17
      • 2013-05-25
      • 1970-01-01
      • 2020-12-09
      • 1970-01-01
      • 2010-12-30
      相关资源
      最近更新 更多