Python 反馈循环以获得中位数范围内的特定数量的点

Python feedback loop in order to obtain a specific amount of points in a range about a median

我有一个 x 数值列表。

首先,我指定一个范围。我想从 x 中获取此范围内的值。值的范围是 x 的中位数的 ±R。我想调整 R 以获得特定数量的值 N。我认为实现这一目标的唯一方法是通过某种反馈循环。尽可能接近 N 的快速有效方法是什么?

例如

x = ['3','5','1','2','4'] 我想要 3-R<3<3+R 的值范围,因为 3 是中位数。假设 N = 3。获得的值将是 ['2','3','4'],其中 R 作为 1.

示例代码:

N = 3
x = ['3','5','1','2','4']
R = 1
n = some number to allow room for error
y = values of x in range ±R from median
while len(y) > N+n or len(y) < N-n:
    if len(y) > N+n:
        R -= ADJUST VALUE PROPORTIONAL TO ERROR HERE?
    if len(y) < N-n:
        R += ADJUST VALUE PROPORTIONAL TO ERROR HERE?
    y = values of x in range ±R from median (update y list with new R)

天真地,我会尝试一种 Bolzano theorem 方法。你得到中位数,然后是离中位数最远的值,并将它们之间的距离称为 L0。当然,这将包括所有要点。然后将 L0 除以 2 并检查间隔内有多少点。还是太多还是太少?

  • 如果太多,L0=L 且 L = L0/2。
  • 如果太少,L=(L0+L)/2。

因此,您将以递归方式将括号放入解决方案中。