举个简单的方法:首先计算出任意两个集合的交集,然后推广到 N 个集合。
示例代码如下
# -*- coding: utf-8 -*-
from functools import reduce
def intersection(range_a, range_b):
""" 返回两集合的交集,None 代表空集。"""
if not (range_a and range_b):
return None
lower_a, upper_a = range_a
lower_b, upper_b = range_b
if lower_b < lower_a:
if upper_b < lower_a:
return None
if upper_b < upper_a:
return (lower_a, upper_b)
return tuple(range_a)
if lower_b < upper_a:
if upper_b < upper_a:
return tuple(range_b)
return (lower_b, upper_a)
return None
def intersectionN(ranges):
""" 返回 N 个集合的交集,None 代表空集。"""
return reduce(intersection, ranges)
def _test_intersection_algorithm(f):
"""
测