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

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Toto81
User
Beiträge: 4
Registriert: Mittwoch 10. Juni 2015, 15:28

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?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Die `while`-Schleife kennst du doch offensichtlich schon?
Toto81
User
Beiträge: 4
Registriert: Mittwoch 10. Juni 2015, 15:28

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 :)
Antworten