from heapq 中央値

  • median
  • 上半分小さい順と下半分大きい順のキューを用意。交互につっこんで、上半分の最小値が下半分の最大値を超えてる時は入れ替える python
from random import shuffle
xs = list(range(10))
shuffle(xs)
upper = []
lower = []
for i, x in enumerate(xs):
    if i % 2 == 0:
        heappush(upper, x)
    else:
        heappush(lower, -x)
        print(upper, lower)
        if -lower[0] > upper[0]:
            l = -lower[0]
            u = -upper[0]
            heapreplace(lower, u)
            heapreplace(upper, l)
            print(upper, lower)
print(upper[0], -lower[0])  # => 5 4