【发布时间】:2021-07-30 11:15:21
【问题描述】:
是否有一些函数可以对列表、列表列表或 numpy 数组进行舍入,并输出同一对象的舍入版本。 np.round(参见例如 https://stackoverflow.com/a/46994452/7238575)很接近,但如果它是一个列表,它会将一个对象更改为一个 numpy 数组。我想要一个保留数据类型的通用舍入函数。
【问题讨论】:
标签: python list numpy rounding
是否有一些函数可以对列表、列表列表或 numpy 数组进行舍入,并输出同一对象的舍入版本。 np.round(参见例如 https://stackoverflow.com/a/46994452/7238575)很接近,但如果它是一个列表,它会将一个对象更改为一个 numpy 数组。我想要一个保留数据类型的通用舍入函数。
【问题讨论】:
标签: python list numpy rounding
您可以从 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
正如所写,它处理用于集合的列表、字典、集合和元组以及用于舍入的整数和浮点数。如果您需要处理其他类型,则必须将它们添加到上述实现中或为该函数实现一些通用接口。
【讨论】: