我有foreach函数,它在它包含的每个元素上调用指定的函数.我希望从这个元素中得到最少但我不知道如何编写lambda或函数,甚至是一个能够管理它的类.谢谢你的帮助.
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)
你不能用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)
写作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)
现在,你可以调用min的min(myobj).