我有一张花车的清单
l1 = [10.0, 50.0, 100.0]
l2 = [0.1, 0.5, 1.0]
l3 = [20.0, 100.0, 200.0]
所有人都应返回:
i = [1, 5, 10]
以较小的整数作为基数乘数,得到整数的最有效方法是什么?或者是它们的倍数,如果不可能的话
例如:
n1 = [0.2, 0.3, 0.6]
应该回来
i = [2, 3, 6]
及
n2 = [1424.56, 2136.84, 4985.96]
应返回:
i = [ 2, 3, 7] # 712.28 = 1
我使用的是value / min(l1)
,但它不适用于第二种情况和第三种情况
您可以将所有数字转换为整数,然后将每个数除以它们的greatest common divisor (GCD)。避免使用浮点数是一个好主意,因为它们无法准确地表示许多小数。 fractions模块非常适合这一点:它可以处理小数和有理数,如1/3和2/7
这会将每个数字转换为有理数fraction,然后将它们乘以分母的最小公倍数(LCM)。这有效地放大了它们,所以它们都是整数。然后用它们的集体GCD将它们分开,尽可能地缩小它们
例如:
(使用
limit_denominator()
允许传入浮点,即使是不精确的浮点。不完全建议这样做,但您可以省略引号并传递0.2
来代替'0.2'
或1/3
来代替'1/3'
。)在整数中,您正在寻找最大公约数。有很多算法可以找到它。然后,您需要将该逻辑转换为浮点数,请记住,浮点数算术意味着接近零的值可能应被视为零:
打印出:
Python 3.5引入了math.isclose,您可以使用它来代替
iszero
。它还将gcd从fractions移至math。内置gcd的问题在于它没有考虑到浮点接近于零的情况,所以一切都会崩溃相关问题 更多 >
编程相关推荐