Esta sección ha sido probado por especialistas para que tengas la seguridad de la veracidad de esta crónica.
Solución:
Hace que sea un poco más fácil de procesar (como en pensar) si en su lugar configura una nueva lista. Además, también puede conservar sus datos originales.
temp_tuple.sort(key=lambda interval: interval[0])
merged = [temp_tuple[0]]
for current in temp_tuple:
previous = merged[-1]
if current[0] <= previous[1]:
previous[1] = max(previous[1], current[1])
else:
merged.append(current)
Si tu ahora print(merged)
saldría:
[[-25, -14], [-10, -3], [2, 6], [12, 18], [22, 30]]
Esta es una solución numpy que se me ocurrió:
import numpy as np
def merge_intervals(intervals):
starts = intervals[:,0]
ends = np.maximum.accumulate(intervals[:,1])
valid = np.zeros(len(intervals) + 1, dtype=np.bool)
valid[0] = True
valid[-1] = True
valid[1:-1] = starts[1:] >= ends[:-1]
return np.vstack((starts[:][valid[:-1]], ends[:][valid[1:]])).T
#example
a=[]
a.append([1,3])
a.append([4,10])
a.append([5,12])
a.append([6,8])
a.append([20,33])
a.append([30,35])
b = np.array(a)
print("intervals")
print(b)
print()
print("merged intervals")
print(merge_intervals(b))
Producción:
intervals
[[ 1 3]
[ 4 10]
[ 5 12]
[ 6 8]
[20 33]
[30 35]]
merged intervals
[[ 1 3]
[ 4 12]
[20 35]]
Tenga en cuenta que la entrada array debe ser ordenado por posiciones de inicio.
Reseñas y valoraciones del tutorial
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)