" name="sm-site-verification"/>
侧边栏壁纸
博主头像
PySuper博主等级

千里之行,始于足下

  • 累计撰写 203 篇文章
  • 累计创建 14 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

Python 处理数值区间

PySuper
2020-08-24 / 0 评论 / 0 点赞 / 21 阅读 / 3906 字
温馨提示:
所有牛逼的人都有一段苦逼的岁月。 但是你只要像SB一样去坚持,终将牛逼!!! ✊✊✊

合并多个区间

def merge(intervals):
    '''
    @msg: 合并多个区间
    @param intervals {list} 一个二维数组,每一项代表一个区间
    @return: {list}  返回合并后的区间列表
    '''

    intervals = [sorted(x) for x in intervals]
    intervals.sort(key=lambda x: x[0])
    merged = []
    for interval in intervals:
        if not merged or merged[-1][1] < interval[0]:
            merged.append(interval)
        else:
             merged[-1][1] = max(merged[-1][1], interval[1])
    return merged

判断两个区间的关系

def relation(interval1,interval2):
    '''
    @msg: 判断两个区间的关系
    @param interval1 {list} 第一个区间
    @param interval2 {list} 第二个区间
    @return: {int}  返回两个区间的关系,0:两个区间相等、1:两个区间相离、2:两个区间相交、3:两个区间为包含关系
    '''

    min1,max1=sorted(interval1)
    min2,max2=sorted(interval2)
    if(min1==min2 and max1==max2):return 0
    if(max1<min2 or max2<min1):return 1
    if(min1<min2<=max1<max2 or min2<min1<=max2<max1):return 2
    if(min1<=min2<=max2<=max1 or min2<=min1<=max1<=max2):return 3

某个区间是否被另一个区间包含

def is_in(interval1,interval2):
    '''
    @msg: 判断某个区间是否被另一个区间包含
    @param interval1 {list} 第一个区间
    @param interval2 {list} 第二个区间
    @return: {bool}  interval1被interval2包含返回真,否则返回假
    '''

    min1,max1=sorted(interval1)
    min2,max2=sorted(interval2)
    if(min2<=min1<=max1<=max2):return True
    else: return False

求多个区间在某个大区间上的补集

def complement(wide,intervals):
    '''
    @msg: 求多个区间在某个大区间上的补集
    @param wide {list} 大区间
    @param intervals {list} 多个区间列表
    @return: {list}  返回补集区间列表
    '''

    start,end=wide
    front,back=start,start
    result=[]
    intervals = [sorted(x) for x in intervals]
    intervals.sort(key=lambda x: x[0])
    for (start1,end1) in intervals:
        if start1 > end: break
        front=start1
        if front>back:result.append([back,front-1])
        if end1+1>back: back=end1+1
    if back<=end: result.append([back,end])
    return(result)

求两个区间的交集

def intersection(interval1,interval2):
    '''
    @msg: 求两个区间的交集
    @param interval1 {list} 第一个区间
    @param interval2 {list} 第二个区间
    @return: {list}  若两个区间存在交集,则返回交集,否则返回空列表
    '''

    nums=sorted(interval1+interval2)
    if relation(interval1,interval2) != 1:
        return [nums[1],nums[2]]
    else:return []

参考:Python数值区间处理的几个函数

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区