给定一组整数(例如 {1000000, 20000000, 1234000, 1200000}),我想对它们应用一个函数,这样:
- 数字的大小尽可能降低
- 所有数字都是整数
- 它们的相对比例保持不变
换句话说,我想去掉尽可能多的零而不丢失除绝对大小以外的任何信息,所以集合将变为 {1000, 20000, 1234, 1200}
这个操作是否有一个术语,是否有一个高效的 Python 函数,或者我应该快速编写代码吗?
编辑:This solution不是重复的,因为它处理单数 - 在我的例子中,零的数量取决于特定的集合。
编辑 2:Green Cloak Guy 为我的确切要求提供了一个解决方案,而 Illmora 的解决方案做了我应该首先实际概念化的事情。
请您参考如下方法:
根据您的要求,您可以通过将每个输入数字除以所有输入数字的 GCD(最大公分母)来轻松完成您的要求。
#!/usr/bin/env python3
import math
from functools import reduce
numbers = [1000000, 20000000, 1234000, 1200000]
# Find the greatest common denominator
gcd = reduce(lambda x,y: math.gcd(x,y), numbers)
# Divide each number by the GCD
minimum_numbers = map(lambda x: int(x/gcd), numbers)
print(*minimum_numbers, sep=',')
根据您输入的数字,它会产生以下结果:
500,10000,617,600
由于 GCD 的属性,输出保证是尽可能低的整数,同时仍保持每个数字之间的相对比例。
