Seite 1 von 1

Update range(len(x)) während des for loops

Verfasst: Freitag 12. Juni 2015, 17:30
von Toto81
Hallo,

Ich möchte Koordinaten verdichten und habe dafür den folgenden Code geschrieben:

Code: Alles auswählen

def densify(x,y):
    for i in range(len(x)-1):
        while math.hypot(x[i]-x[i+1], y[i]-y[i+1])>1:
            x.insert(i+1,(x[i]+x[i+1])/2)
            y.insert(i+1,(y[i]+y[i+1])/2)
            
    return x, y
Jetzt habe ich allerdings das Problem, dass sich bei jedem Update die Länge der Liste x vergrößert wenn ich einen neuen Wert einfüge. Daher stoppt meine Funktion früher, da der for-loop die alte Länge der x-Liste nimmt und sie nicht updated.

Weiß jemand einen Weg das zu verbessern?

Re: Update range(len(x)) während des for loops

Verfasst: Freitag 12. Juni 2015, 18:20
von cofi
Die `while`-Schleife kennst du doch offensichtlich schon?

Re: Update range(len(x)) während des for loops

Verfasst: Freitag 12. Juni 2015, 18:25
von Toto81
Ja.... Ich hatte da ein Brett vor dem Kopf. Ich bin noch Anfänger in Python, hätte das aber trotzdem sehen können.

Nun habe ich das schon gemacht, bekomme aber einen "while math.hypot(x-x[i+1], y-y[i+1])>1: IndexError: list index out of range" Error für diesen Code:

Code: Alles auswählen

def densify(x,y):
    i=0
    while i < range(len(x)-1):
        while math.hypot(x[i]-x[i+1], y[i]-y[i+1])>1:
            x.insert(i+1,(x[i]+x[i+1])/2)
            y.insert(i+1,(y[i]+y[i+1])/2)
        i+=1
        
    return x, y
UPDATE:
Got it :)