겹치는 range 합치기(step이 1인 경우)

mhComa·2021년 1월 4일
0

코드

//확인할 range들의 list
ranges_old:list[range] = [
	range(1, 10),
	range(5, 15),
	range(20, 30),
	range(25, 35),
	range(30, 40),
	range(2, 12),
	range(45, 80)
]
//합쳐질 range들의 list
ranges_new:list[range] = []

result = True
while True:
	x = ranges_old[0]
	count = 0
	//하나씩 확인하면서 교차를 확인
	for i in range(1, len(ranges_old)):
		xs = set(x)
		y = ranges_old[i - count]
		ip = xs.intersection(y)
   		//겹치는 range가 있으면 합치기
		if len(ip) > 0:
			begin = min(x.start, y.start)
			end = max(x.stop, y.stop)
			x = range(begin, end)
			ranges_old.pop(i - count)
			count += 1
			result = False
	ranges_new.append(x)
	ranges_old.pop(0)
	//더 이상 합칠 range가 없다면 완료
	if result or len(ranges_old) == 0:
		break

print(ranges_new)

결과

[range(1, 15), range(20, 40), range(45, 80)]
profile
Ich bin ein Hund!

0개의 댓글