鉴于您在这里关心的只是减少幅度,您是否考虑过将您的数字表示为Decimals,然后以科学记数法打印?
from decimal import Decimal
nums = {Decimal(1000000), Decimal(20000000), Decimal(1234000), Decimal(1200000)}
print({str(num.normalize()) for num in nums})
# {'1E+6', '1.2E+6', '2E+7', '1.234E+6'}
如果这对您的用例不合理,那么您可以做的另一件事基本上是确定您可以减少的最大幅度,然后减少那么多。对于 10 的量级,这相当简单,您可以使用字符串来完成:
nums = {1000000, 20000000, 1234000, 1200000}
div_factor = 10 ** min(len(str(num)) - len(str(num).rstrip('0')) for num in nums)
reduced_nums = {num / div_factor for num in nums}
# {1000.0, 1234.0, 20000.0, 1200.0}
# you can use integer division `//` instead of true division `/` if you want
对于非标准量级(例如 3 级),您需要更有创意并想出一种方法来有效地计算出可以除以的最大量级。我上面的例子通过检查当我们去掉尾随的零时有多少数字消失(这相当于检查可以被整数除以数字的 10 的最大指数)来采取捷径。由于 python 没有内置的方法来打印不是 2、8、10 或 16 的基数,因此您必须找出自己的解决方案。