我刚刚开始使用 Python。
这是一个齿轮率计算器。
我有一个 367 到 7645373 范围内的 5000 个整数的列表和一个原始分数,它可以是 1/10 或 34561/43521 到 10/1。
我需要创建一个新分数,其值与原始分数接近,由表中存在的分子和分母组成。
事实上,我想要一个按与原始分数的偏差排序的匹配列表。
我有一个解决方案,但需要很长时间才能给出值为 1/10 的结果,因为 367/3670 或 368/3680 或 4352/43520 等解决方案是等效的。
Pythonist 会怎么做呢?
请不要告诉我这是 C 库的情况!:D
干杯
安东尼奥
def searcharatio(l, a):
b = []
mx = l[-1][0]
ln = l[0][0]
ld = l[0][0]
i = max(int(ln/a.numerator-1), int(ld/a.denominator)-1)
print i
while 1:
n = a.numerator * i
d = a.denominator * i
if n > mx or d > mx:
return sorted(b)
if n > 0.9*ln and d > 0.9*ld:
# enumerate es lista 2 elem 0=num orden, 1=elemento
ri = (min(enumerate(l), key=lambda x:abs(x[1][0]-n)))
ro = (min(enumerate(l), key=lambda x:abs(x[1][0]-d)))
ln = ri[1][0]
ld = ro[1][0]
e = [abs(1.0 - ((float(ln)/ld) / (float(n)/d))), i, ri, ro]
b.append(e)
i+=1