のようなソートされたリスト[1.1, 2.2, 3.3]
と のような境界値が与えmath.pi*2
られた場合、任意の値に最も近い値を返します[0 - math.pi*2)
関数は値のインデックスを返す必要があるため、 returnはwhile return をf(1.2)
返し、境界値が与えられた場合は 3.3 よりも 1.1 に近く、 atと returnでラップする必要があります。完全に明確にするために、この関数は下端でもラップアラウンドする必要があるため、 が返されます。0
f(2.1)
1
f(6.0)
math.pi*2
0
f(1.0, [5.0, 6.0], bound = math.pi*2)
1
使用例は、ラジアン単位の任意の角度を、リスト内の最も近い既存の有効な角度にマップすることです。私はこの種の関数を python で を使って数回書いたことbisect
がありますが、コードは常に私の美的感覚を損なうことになります。高度な複雑さとエッジ ケースの数は、関数の直感的な単純さと釣り合っていないように見えます。そこで、効率とエレガンスの両方の点で、誰かが満足のいく実装を思い付くことができるかどうかを尋ねています。