2010-10-24 49 views
-1

我应该写一个函数min_in_list(munbers),它取得一个 数字的列表并返回最小的一个。注意:不允许内置功能min替换python中的内置最小值函数

def min_in_list(numbers): 
    the_smallest = [n for n in numbers if n < n+1] 
    return the_smallest 

怎么了?

+0

你不喜欢它什么?它不运行吗?它是否得到异常?它会产生错误的答案吗?如果您要求我们帮助您完成作业,请提供详情。细节很重要。它表明你在学习。 – 2010-10-24 15:37:11

+3

你有什么问题是n总是小于n + 1(它怎么可能不是?),所以你会得到整个列表。 – kindall 2010-10-24 15:43:41

+0

你试过了吗?这是它是如何工作的: >>> min_in_list([1,2,3,4,5])输出 [1,2,3,4,5] – Gusto 2010-10-24 15:52:20

回答

1
def min_of_two(x, y): 
    if x >= y: return x 
    else: return y 

def min_in_list(numbers): 
    return reduce(min_of_two, numbers) 

您必须从列表中产生1个数字,而不仅仅是另一个列表。这是reduce函数的工作(当然,您可以在没有reduce的情况下实现它,但可以通过类比来实现)。

+0

正是我需要的! – Gusto 2010-10-24 16:03:11

+0

@Gusto:是的,但是你如何向你的老师解释你是如何达到这个解决方案的? – tzot 2010-10-24 16:18:26

+0

@ΤΖΩΤΖΙΟΥ我不必解释任何事情 - 这是对考试的准备,而不是“家庭作业”。 – Gusto 2010-10-24 16:27:44

0

你在这里。这几乎可以确定为尽可能简单。你甚至不用给我的信用,当你打开的任务。

import itertools 
import functools 
import operator 

def min(seq, keyfun=operator.gt): 
    lt = lambda n: functools.partial(keyfun, n) 

    for i in seq: 
     lti = lt(i) 
     try: 
      next(itertools.ifilter(lti, seq)) 
     except: 
      return i 
+0

太长太复杂 – Gusto 2010-10-24 16:05:58

0
min = lambda n: return reduce(lambda x,y: (x>y) and return x or return y,n) 

从未测试,在你自己的风险。