Python,lambda,找到最小值
我有一个foreach函数,它会对里面的每个元素调用指定的函数。我想从这些元素中找出最小值,但我不知道该怎么写一个lambda表达式、函数,甚至是一个类来实现这个功能。感谢大家的帮助。
我这样使用我的foreach函数:
o.foreach( lambda i: i.call() )
或者
o.foreach( I.call )
我不想创建列表或其他对象。我想直接遍历这些元素并找到最小值。
我写了一个类来实现这个功能,但我觉得应该有更好的解决方案:
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()
好的,我想我的.foreach方法不是Python的常见做法。我应该让我的类可以被迭代,因为你们的解决方案都是基于列表的,这样一切就会简单很多。
在C#中,像这样的lambda函数没有问题,所以我以为Python也同样强大。
7 个回答
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])
5
写一个 foreach
方法并不是很符合 Python 的风格。你最好把它做成一个迭代器,这样就可以和 Python 的标准函数,比如 min
一起使用。
与其写成这样:
def foreach(self, f):
for d in self._data:
f(d)
不如写成这样:
def __iter__(self):
for d in self._data:
yield d
现在你可以像这样调用 min
:min(myobj)
。