Python,lambda,找到最小值

qba*_*qba 6 python lambda

我有foreach函数,它在它包含的每个元素上调用指定的函数.我希望从这个元素中得到最少但我不知道如何编写lambda或函数,甚至是一个能够管理它的类.谢谢你的帮助.


我使用我的foreach函数:

o.foreach( lambda i: i.call() )
Run Code Online (Sandbox Code Playgroud)

要么

o.foreach( I.call )
Run Code Online (Sandbox Code Playgroud)

我不喜欢制作列表或其他对象.我想通过它迭代并找到min.

我设法写一个做思考的课程,但应该有一个更好的解决方案:

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()
Run Code Online (Sandbox Code Playgroud)

好的,所以我想我的.foreach方法是非蟒蛇的想法.我应该做我的Class iterable,因为你的所有解决方案都基于列表,然后一切都会变得更容易.

在C#中,lambda函数没有问题,所以我觉得python也很强大.

Rya*_*ght 13

Python内置支持查找最小值:

>>> min([1, 2, 3])
1
Run Code Online (Sandbox Code Playgroud)

如果您需要先使用函数处理列表,可以使用map执行此操作:

>>> def double(x):
...    return x * 2
... 
>>> min(map(double, [1, 2, 3]))
2
Run Code Online (Sandbox Code Playgroud)

或者您可以使用列表推导生成器表达式,例如:

>>> min(double(x) for x in [1, 2, 3])
2
Run Code Online (Sandbox Code Playgroud)


Chu*_*uck 7

你不能用foreach和lambda 做这个.如果你想在没有实际使用的情况下以功能样式执行此操作min,您会发现reduce它非常接近您尝试定义的功能.

l = [5,2,6,7,9,8]
reduce(lambda a,b: a if a < b else b, l[1:], l[0])
Run Code Online (Sandbox Code Playgroud)


Ana*_*thu 5

写作foreach方法不是非常pythonic.你应该更好地使它成为一个迭代器,以便它可以使用标准的python函数min.

而不是写这样的东西:

def foreach(self, f):
    for d in self._data:
        f(d)
Run Code Online (Sandbox Code Playgroud)

写这个:

def __iter__(self):
    for d in self._data:
        yield d
Run Code Online (Sandbox Code Playgroud)

现在,你可以调用minmin(myobj).