6 Stimmen

Python, lambda, Minimum finden

Ich habe foreach-Funktion, die angegebene Funktion auf jedes Element, das es enthält, aufruft. Ich möchte Minimum von diesen Elementen zu erhalten, aber ich habe keine Ahnung, wie Lambda oder Funktion oder sogar eine Klasse zu schreiben, die das verwalten würde. Danke für jede Hilfe.


Ich verwende meine foreach-Funktion wie folgt:

o.foreach( lambda i: i.call() )

ou

o.foreach( I.call )

Ich mag es nicht, Listen oder andere Objekte zu erstellen. Ich möchte es durchlaufen und min finden.

Ich habe es geschafft, eine Klasse zu schreiben, die das Denken übernimmt, aber es sollte eine bessere Lösung als diese geben:

class Min:                                           
    def __init__(self,i):                        
        self.i = i                              
    def get_min(self):                               
        return self.i                                
    def set_val(self,o):                             
        if o.val < self.i: self.i = o.val

m = Min( xmin )
self.foreach( m.set_val )                            
xmin = m.get_min()

Ok, so nehme ich an, dass meine .foreach-Methode nicht Python Idee ist. Ich sollte meine Klasse iterable tun, weil alle Ihre Lösungen auf Listen basieren und dann wird alles einfacher werden.

In C# gäbe es kein Problem mit solchen Lambda-Funktionen, also dachte ich, dass Python auch so mächtig ist.

0voto

John La Rooy Punkte 278961

Angenommen, Sie haben

>>> seq = range(-4,4)
>>> def f(x):
...  return x*x-2

für den Mindestwert von f

>>> min(f(x) for x in seq)
-2

für den Wert von x beim Minimum

>>> min(seq, key=f)
0

Natürlich können Sie auch Lambda verwenden

>>> min((lambda x:x*x-2)(x) for x in range(-4,4))
-2

aber das ist ein bisschen hässlich, die Karte sieht hier besser aus

>>> min(map(lambda x:x*x-2, seq))
-2

>>> min(seq,key=lambda x:x*x-2)
0

-1voto

AlwaysReady Punkte 1

Sie können dies verwenden:

x = lambda x,y,z: min(x,y,z)
print(x(3,2,1))

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X