2015-12-03 2 views
2

я хочу сделать это:Наибольшее четное число в списке, используя складка

  • Построить функцию, которая принимает в списке как параметр и возвращает наибольшее четное число в этом списке.
  • ли это с помощью функции «фолд» в Python

Я думал, что это может быть что-то вдоль линий:

def fold(f, v, l): 
    for x in l: 
     v = f(v, x) 
    return v 

def biggest_even_number(xs): 
    l = [i for i in xs if i % 2 == 0] 
    return fold(l) 

Я знаю, что это неправильно, но я просто не знаю, как настроить это. Как выполнить вышеуказанную задачу с помощью функции «fold»?

+1

вам необходимо использовать свою собственную версию 'фолд()' ли? Python предоставляет 'reduce()' как встроенный. –

ответ

3

fold функция выглядит хорошо. Вам просто нужно вызвать с правильными аргументами:

def biggest_even_number(xs): 
    l = [i for i in xs if i % 2 == 0] 
    return fold(max, float("-inf"), l) 

Если это не домашнее задание, вы можете использовать встроенный reduce(), который в основном делает то же самое:

def biggest_even_number(xs): 
    l = [i for i in xs if i % 2 == 0] 
    return reduce(max, l, float("-inf")) 

Благодаря @Steven Rumbalski, для тех, кто пытается найти максимальное значение последовательности, вам не нужно даже reduce:

def biggest_even_number(xs): 
    return max(i for i in xs if i % 2 == 0) 
+0

Большое вам спасибо !!! – Katie2423

+1

'def most_even_number (xs): return max (i для i в xs, если i% 2 == 0)' Нет необходимости в сокращении. Хороший ответ. Плохое домашнее задание. –

1

ли что-то вроде следующего:

def fold(l): 
    biggest = float("-inf") 
    for i in l: 
     biggest = max(i, biggest) 
    return biggest 

def biggest_even_number(xs): 
    l = [i for i in xs if i % 2 == 0] 
    return fold(l) 
Смежные вопросы