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]
?修复了描述。