def dominates(row, rowCandidate):
    return all(r >= rc for r, rc in zip(row, rowCandidate))

def cull(pts, dominates):
    dominated = []
cleared = []
remaining = pts
while remaining:
    candidate = remaining[0]
new_remaining = []
for other in remaining[1:]:
    [new_remaining, dominated][dominates(candidate, other)].append(other)
if not any(dominates(other, candidate) for other in new_remaining):
    cleared.append(candidate)
else:
    dominated.append(candidate)
remaining = new_remaining
return cleared, dominated
Быстрый расчет фронта Парето в Python