Seite 1 von 1
Gleichung von Listen über for-Schleife lösen
Verfasst: Mittwoch 8. Dezember 2021, 14:29
von herttim
Hallo zusammen,
ich bin noch recht unerfahren mit Python, jedoch würde ich gerne wissen, wie man aus zwei Listen die wie folgt vorhanden sind:
Code: Alles auswählen
k = list(range(1, int(self.AnzSch.get())+1)) #Liste von 1-60
j = list(range(1, int(self.AnzSch.get())+1)) #Liste von 1-60
Und einer Basisgleichung:
Eine Schleife aufbaut, um alle Ergebnissvariationen von w in Abhängigkeit der beiden Listen darstellt.
Also z.B.
usw.
Ich würde mich sehr freuen wenn es hier eine einfache Lösung gibt
Vielen Dank im Voraus!
Re: Gleichung von Listen über for-Schleife lösen
Verfasst: Mittwoch 8. Dezember 2021, 15:50
von rogerb
@herttim,
das geht nicht, da k und j die gleichen Elemente enthalten. Dadurch teilt man immer durch 0, was bekanntlich nicht möglich ist.
Bei unterschiedlichen Werten könnte man es so machen (oder mit List-Comprehension / GeneratorExpression)
Ich denke es ist selbsterklärend:
Code: Alles auswählen
k = list(range(61, 121))
j = list(range(1, 61))
def w_func(k, j):
return 1 / (k - j) * 40
w = []
for k_element, j_element in zip(k, j):
w.append(w_func(k_element, j_element))
print(w)
List-Comprehension
Code: Alles auswählen
k = list(range(61, 121))
j = list(range(1, 61))
w = [1 / (k - j) * 40 for k, j in zip(k, j)]
print(w)
Re: Gleichung von Listen über for-Schleife lösen
Verfasst: Mittwoch 8. Dezember 2021, 16:26
von noisefloor
Hallo,
du kannst dir mit Hilfe von `itertools.product` alle Kombinationen der Wert erstellen lassen und dann Rechnen. Der Fehler der Division durch Null kann trotzdem vorkommen, musst du halt entsprechend behandeln.
Beispiel für eine Rechnung ohne Fehlerbehandlung:
Code: Alles auswählen
>>> from itertools import product
>>> number = range(5)
>>> for a, b in product(number, repeat=2):
... print(a+b)
...
0
1
2
...
7
8
Gruß, noisefloor
Re: Gleichung von Listen über for-Schleife lösen
Verfasst: Mittwoch 8. Dezember 2021, 18:51
von __blackjack__
Oder halt einfach zwei verschachtelte Schleifen. Ich verstehe deshalb nicht so ganz was das konkrete Problem ist. Man darf halt nicht die Listen genau so nennen wie ein einzelnes Element.
Zudem kann man sich den `list()`-Aufruf sparen, denn die `range()`-Objekte sind ja iterierbar. Und wenn die gleich sind, braucht man auch nur ein `range()`-Objekt.
`AnzSch` ist als Name schlecht. Zum einen müsste es formal `anz_sch` heissen, weil Namen in Python klein_mit_unterstrichen geschrieben werden. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase). Und eine Klasse ist das ja wohl offensichtlich nicht. Der zweite Grund warum das ein schlechter Name ist: Namen sollen dem Leser verraten was der Wert dahinter bedeutet, und nicht Fragezeichen hinterlassen und zum rätselraten zwingen. `Anz`? Anzahl? Anzeige? Was ganz anderes? Und für welchen Sch… steht `Sch`?
Re: Gleichung von Listen über for-Schleife lösen
Verfasst: Donnerstag 9. Dezember 2021, 09:27
von herttim
Danke für die schnellen Antworten
@__blackjack__
Für den Fall, dass zwei Gleiche Zahlen einer Liste betrachtet werden, sollte folgende Bedingung gelten:
Könnte man das irgendwie über eine verschachtelte Schleife mit for und if Bedingungen abbilden?
Also alle ungleichen Kombinationen der Liste rechnen lassen, und bei gleichen Kombinationen auf die Ersatzbedingung zurückgreifen?
Ich bin da leider gerade ziemlich am verzweifeln...
Viele Grüße
herttim
Re: Gleichung von Listen über for-Schleife lösen
Verfasst: Donnerstag 9. Dezember 2021, 09:36
von __blackjack__
@herttim: Ja das könnte man und wo ist denn das Problem? Ich meine Du willst für jeden Wert aus der ersten Liste etwas für jeden Wert aus der zweiten Liste machen. Und zwar in Abhängigkeit ob die beiden Werte gleich sind, entweder einen festen Wert nehmen oder eine Berechnung durchführen. Das kann man mit ``for`` und ``if`` genau so schreiben wie man das in Worten sagt. Das ist 1:1 in ``for`` und ``if`` ausdrückbar. Einfacher, direkter, unkomplizierter geht es gar nicht.