def partition(seq, pred, start=0, end=-1):
    if end == -1:
        end = len(seq)
while True:
    while True:
        if start == end:
            return start
if not pred(seq[start]):
    break
start += 1
while True:
    if pred(seq[end - 1]):
        break
end -= 1
if start == end:
    return start
seq[start], seq[end - 1] = seq[end - 1], seq[start]
start += 1
end -= 1
Быстрый способ получить элементы N Min или Max из списка в Python