for loop /if Problem

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
Rosa
User
Beiträge: 1
Registriert: Mittwoch 5. Mai 2021, 11:25

Hallo an alle,

ich habe eine Liste von Tupeln (also x und y Koordinaten) und möchte wissen ob diese Tupel in einem bestimmten Intervall liegen (z. B. 2 > x > 1). Wenn der erste Tupel/Eintrage/Koordinate in diesen Intervall liegt, dann kommt die entsprechende Zeile der Liste mit den Tupeln in eine seperate Liste. Dann wird der durch iteriert und jede Zeile sollte in andere Listen reingeschrieben werden. Ich hoffe ich konnte es irgendwie erklären. :?

Vereinfacht zum Verständnis:

Code: Alles auswählen

Alte_Liste = [(1,1), (2,1),....], [..], [..],..
Neue_Liste = []

for i in range(len(Alte_Liste)):
      for j in range(len(Alte_Liste[i])):
           if (2 > x[i][j] > 1) and (2 > y[i][j] > 1):           
                Neue_Liste.append(Alte_Liste)
                if Alte_Liste in Neue_Liste:
                    continue
                 
Mein Problem ist es, dass in jeder Überprüfung des Eintrages die gleiche Zeile in die Neue_Liste eingetragen wird. Die Einträge der Zeile sollen alle überprüft werden, aber die Zeile soll nur einmal hinzugefügt werden in Neue_Liste. Aktuell wird je Eintrag die gleiche Zeile jedes mal in die neue Liste hinzugefügt. Wenn also die Zeile 10 Einträge hat, hat die neue Liste 10 gleiche Zeilen, dessen Einträge überprüft wurden sind. Habt ihr eine Idee wie man das beschränken könnte? Ich habe es mit der zweiten if-Bedingung probiert, erfolglos.

Vielen Dank schonmal für die Unterstützung. :roll:
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

Eine vereinfachter Code hilft nicht beim Verstehen Deines Problems.
Über Indizes iteriert man nicht, ich versteh nicht, was i und j von Alte_Liste mit einem x und y zu tun hat? Woher kommen diese x und y?
Wenn Du Alte_Liste komplett in Neue_Liste schreibt dann ist natürlich das if danach immer wahr. Das ist eh unsinnig, da egal ob Du continue ausführst oder nicht, Du mit dem nächsten Schleifendurchgang weiter machst.

Das was Du Alte_Liste nennst, ist laut Code ein Tuple. Wie sehen die Daten also tatsächlich aus?
Zizibee
User
Beiträge: 229
Registriert: Donnerstag 12. April 2007, 08:36

Willst du so etwas in der Art?

Code: Alles auswählen

alte_liste = [[(1.1, 1.8), ("kommt rein"), ("kommt auch rein")],
              [(1.1, 2.1), ("kommt nicht rein")],
              [(1.8, 1.1), ("kommt rein")]]
neue_liste =  []

for element in alte_liste:
    if 2 > element[0][0] > 1  and 2 > element[0][1] > 1:
        neue_liste.append(element)

print(neue_liste)
Ausgabe:
[[(1.1, 1.8), 'kommt rein', 'kommt auch rein'], [(1.8, 1.1), 'kommt rein']]
Antworten