我想制作一个 python 程序,它可以快速减少数组/列表中大于 1 的数字,并将其放在它前面的空白位置。假设我们有:
li = [4,1,0,0,0,1,3,0]
Run Code Online (Sandbox Code Playgroud)
我们会得到:
rtr = [1,1,0,1,1,1,1,0]
Run Code Online (Sandbox Code Playgroud)
注意 4 是如何变成 1 的,因为它已经在左边了,然后 3 在已经被取走的 1 之前被分成了 2 个位置。谁能帮我解决这个问题?
我正在做https://projecteuler.net/problem=57,在那里我得到分子和分母,如果分子比分母长,我会在总数中加一。
然而,在某一时刻(n=805 以上),分子和分母变得如此之大,以至于 python 将它们转换为无穷大。如果你想测试它,这是我的代码。
def sqrt_2(max_iteration, total = 0, previous_numerator = 1, previous_denominator = 2, iteration = 1):
numerator_test = previous_numerator + previous_denominator
denominator_test = previous_denominator
print(numerator_test, denominator_test, numerator_test / denominator_test)
if len(str(numerator_test)) > len(str(denominator_test)):
total += 1
if iteration == max_iteration:
return total
next_value_numerator = 1 * previous_denominator
next_value_denominator = int(( 2 + (previous_numerator / previous_denominator) ) * previous_denominator)
return sqrt_2(max_iteration, total, next_value_numerator, next_value_denominator, iteration + 1)
print("\n", sqrt_2(806))
Run Code Online (Sandbox Code Playgroud)
有没有办法增加这个无穷大的限制?806真的很接近1000。如果它与IDE / Python版本有什么关系,我使用的是Spyder 5.0和python 3.7。
提前致谢!