Hallo Leute, hätte man ne frage und zwar, ist es möglich mehrere if Anweisung innerhalb einer lambda Funktion zu verwenden ?
Bei Elif streikt die Funktion nämlich.
Lambda/If-Anweisungen
- noisefloor
- User
- Beiträge: 4187
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
probier's doch aus
Was hast du denn konkret vor? Was hast du schon probiert? Was funktioniert nicht so, wie du es dir vorstellst?
Gruß, noisefloor
probier's doch aus

Was hast du denn konkret vor? Was hast du schon probiert? Was funktioniert nicht so, wie du es dir vorstellst?
Gruß, noisefloor
lambdas können nur Ausdrücke. Nicht Anweisungen. if / elif ist aber eine Anweisung. Also nein. Du kannst allerdings ternäre Operatoren benutzen:d_rose hat geschrieben: Dienstag 27. November 2018, 21:36 Hallo Leute, hätte man ne frage und zwar, ist es möglich mehrere if Anweisung innerhalb einer lambda Funktion zu verwenden ?
Bei Elif streikt die Funktion nämlich.
Code: Alles auswählen
x if a else y if b else z
Code: Alles auswählen
Hier mein code :
Code: Alles auswählen
kleiner1 = lambda w1,w2 : w1 if len(w1) < len(w2) else (w1 if w1 < w2 else ( w1 if len(w1) == len(w2) else w2))
- noisefloor
- User
- Beiträge: 4187
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
warum muss das denn unbedingt in eine Lambda-Funktion? Lesbar ist das nicht wirklich...
Gruß, noisefloor
warum muss das denn unbedingt in eine Lambda-Funktion? Lesbar ist das nicht wirklich...
Gruß, noisefloor
macht er bei or nicht das eine oder das andere ? also er soll die Zeichenkette nur lexikografisch vergleichen falls sie gleichlang sind
Zuletzt geändert von d_rose am Dienstag 27. November 2018, 22:29, insgesamt 1-mal geändert.
okay aber dann hab ich ja als "Return" true oder false und kein string wenn ich das jetzt richtig verstehe.
Ich nutze nämlich das was die lambda Funktion mir zurückgibt in einer anderen Funktion, wo die lambda Funktion Als Parameter fungiert.
Ich nutze nämlich das was die lambda Funktion mir zurückgibt in einer anderen Funktion, wo die lambda Funktion Als Parameter fungiert.
ein Vergleich endet notwendigerweise mit einem boolschen wert. Wenn du den irgendwie wieder verarbeitet haben willst, mach das halt.
Deine eigentliche Frage ist beantwortet. lambda kann das nicht anders. Wenn du das benuzten musst, musst du dich halt mit dem ternären Operator begnügen. Was genau nun dein Problem ist kann man aus dem was du bisher dargelegt hast nicht erschliesssen.
Deine eigentliche Frage ist beantwortet. lambda kann das nicht anders. Wenn du das benuzten musst, musst du dich halt mit dem ternären Operator begnügen. Was genau nun dein Problem ist kann man aus dem was du bisher dargelegt hast nicht erschliesssen.
Code: Alles auswählen
list1 = ["z","aaa","1","11111","ccv","22"]
def sortiere(kleiner,L):
trenner = 0
while trenner != len(L):
for i in range(trenner,len(L)):
if kleiner(L[i],L[trenner]):
L[trenner], L[i] = L[i], L[trenner]
trenner += 1
return L
kleiner1 = lambda w1,w2 : w1 if len(w1) < len(w2) or w1 < w2 or w2 < w1 else w2
print(sortiere(kleiner1,list1))
hier der rest vom code, das lambda hat jetzt noch kein sinn.
korrekt müsstet meines Erachtens die liste ["1","z","22","aaa","ccv","11111"] herausgegeben wenn mein lambda das macht was es machen soll.
aber bisher spiegelt er mir nur die liste einfach
die Funktion sortiere ist so wie wir sie verwenden sollen aus der Handreichung entnommen.
mich wundert allerdings schon wenn ich lambda nur so schreibe
das die liste die mir def sortiere gibt nur gespiegelt ist und nicht nach länge der einzelnen Elemente sortiert ist.
mich wundert allerdings schon wenn ich lambda nur so schreibe
Code: Alles auswählen
kleiner1 = lambda w1,w2 : w1 if len(w1) < len(w2) else w2
ok das war mir jetzt etwas hilfreich.
so bin ich der Sache nun 50 % näher dran
noch irgendein tipp ? ohne mir alles vorzusagen
Code: Alles auswählen
kleiner1 = lambda w1,w2 : len(w1) < len(w2) or w1 < w2
noch irgendein tipp ? ohne mir alles vorzusagen

ich würde jetzt ungern den code des profs in frage stellen 
also ich soll einen lambda-ausdruck schreiben zur längenlexikografischen Ordnung zweier Zeichenketten und bei dem fall das die Zeichenketten gleichlang sind soll die Ordnung lexikografisch erfolgen. Mehr kann ich im Moment auch nicht sagen.
Meines Erachtens nach nun nach deiner Hilfestellung ist der lambda Ausdruck korrekt aber trotzdem sieht die liste anschließend so aus :
["1","22","ccv","11111","aaa","z"]

also ich soll einen lambda-ausdruck schreiben zur längenlexikografischen Ordnung zweier Zeichenketten und bei dem fall das die Zeichenketten gleichlang sind soll die Ordnung lexikografisch erfolgen. Mehr kann ich im Moment auch nicht sagen.
Meines Erachtens nach nun nach deiner Hilfestellung ist der lambda Ausdruck korrekt aber trotzdem sieht die liste anschließend so aus :
["1","22","ccv","11111","aaa","z"]