Ich stoße auf ein Problem und wünsche, dass mir jemand einen Tipp geben könnte, um es zu überwinden.Python: füge Bereiche zu einer Liste von Bereichen hinzu, während ich darüber iteriere
Ich habe eine 2D-Python-Liste (83 Zeilen und 3 Spalten). Die ersten beiden Spalten sind die Start- und Endpositionen für ein Intervall. Die 3. Spalte ist ein Ziffernindex (zB 9.68). Die Liste ist nach der 3. Spalte umgekehrt sortiert. Ich möchte alle nicht überlappenden Intervall mit dem höchsten Index erhalten. Hier
ist ein Beispiel für die sortierte Liste:
504 789 9.68
503 784 9.14
505 791 8.78
499 798 8.73
1024 1257 7.52
1027 1305 7.33
507 847 5.86
Hier ist, was ich versucht:
# Define a function that test if 2 intervals overlap
def overlap(start1, end1, start2, end2):
return not (end1 < start2 or end2 < start1)
best_list = [] # Create a list that will store the best intervals
best_list.append([sort[0][0],sort[0][1]]) # Append the first interval of the sorted list
# Loop through the sorted list
for line in sort:
local_start, local_end = line.rsplit("\s",1)[0].split()
for i in range(len(best_list)):
best_start = best_list[i][0]
best_end = best_list[i][1]
test = overlap(int(best_start), int(best_end), int(local_start), int(local_end))
if test is False:
best_list.append([local_start, local_end])
Und ich bekomme:
best_list = [(504, 789),(1024, 1257),(1027, 1305)]
Aber ich will:
best_list = [(504, 789),(1024, 1257)]
Danke!
Wie sieht die ursprüngliche Liste aus? Sind die Werte Zeichenfolgen? Wenn ja, gibt es noch keine Spalten. –
Eigentlich sind sie Strings, deshalb muss ich sie in ganze Zahlen umwandeln, um meinen Test zu machen. Dies ist eine Liste, die ich mit der Funktion csv.reader im Paket csv erstellt habe. –
Also so: '[['504 789 9,68'], ['503 784 9,14'], ....]'? –