Python 如何从整个片段中删除对列表?

Python 如何从整个片段中删除对列表?,python,algorithm,Python,Algorithm,假设我有一个[a,B]的区间(其中a,B是整数)和一个的非重叠区间列表(C_I,D_I),I=1..N(保证[a,B]包含(C_I,D_I),I=1..N),目标是从[a,B]中减去(C_I,D_I),I=1..N: A, B = 1, 10 intervals = [2, 3], [5, 6] ... result = [[1, 1], [4, 4], [7, 10]] 在numpy中有内置的函数吗?或者我必须用蛮力的方式来做?我对numpy中的函数一无所知,但你不必使用蛮力。由于(C_i,

假设我有一个
[a,B]
的区间(其中
a,B
是整数)和一个
的非重叠区间列表(C_I,D_I),I=1..N
(保证
[a,B]
包含
(C_I,D_I),I=1..N
),目标是从
[a,B]中减去
(C_I,D_I),I=1..N:

A, B = 1, 10
intervals = [2, 3], [5, 6]
...
result = [[1, 1], [4, 4], [7, 10]]

numpy
中有内置的函数吗?或者我必须用蛮力的方式来做?

我对numpy中的函数一无所知,但你不必使用蛮力。由于(C_i,D_i)间隔是不重叠的,因此可以对它们进行排序,一旦排序,您就可以对它们进行迭代:

def remove_intervals(A, B, intervals):
    cur = A
    result = []
    for C, D in sorted(intervals):
        if cur < C:
            result.append([cur, C-1])
        cur = D+1
    if D < B:
        result.append([cur, B])
    return result
def删除间隔(A、B、间隔):
cur=A
结果=[]
对于C,D,按排序(间隔):
如果cur
有包。

如果
C
D
重叠,结果如何包含
[4,4]
?修复了描述。