Gleichung von Listen über for-Schleife lösen

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
herttim
User
Beiträge: 19
Registriert: Mittwoch 8. Dezember 2021, 14:18

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:

Code: Alles auswählen

w = (1/(k-j)*40)
Eine Schleife aufbaut, um alle Ergebnissvariationen von w in Abhängigkeit der beiden Listen darstellt.
Also z.B.

Code: Alles auswählen

w = [32, 43, 36,...]
usw.

Ich würde mich sehr freuen wenn es hier eine einfache Lösung gibt :D

Vielen Dank im Voraus!
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

@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)
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

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
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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`?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
herttim
User
Beiträge: 19
Registriert: Mittwoch 8. Dezember 2021, 14:18

Danke für die schnellen Antworten :)

@__blackjack__

Für den Fall, dass zwei Gleiche Zahlen einer Liste betrachtet werden, sollte folgende Bedingung gelten:

Code: Alles auswählen

w_ersatz = 20
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... :cry:

Viele Grüße
herttim
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten