2014-06-25 4 views
1

У меня есть некоторые данные, например журнал изменений в количестве волшебных бобов, находящихся в моем распоряжении. Чтобы упростить вопрос, предположим, что уже отсортированы по дате (от старых к новым) и могут быть представлены в этом списке:Что такое элегантный способ нахождения максимального значения, создаваемого текущей суммой?

a = [1,2,3,-4,5,-6] 

уведомление каждое число означает изменение в ряде волшебных бобов, а не текущий общий , Итак, я начинаю с 1 боба, потом получаю еще 2, потом получаю еще 3, затем я отдаю кому-то 4 бобы и т. Д.

То, что я хочу найти, - это максимальное количество бобов, которые я когда-либо имел в моем распоряжении в один момент времени. То есть, что такое бобы, которые у меня когда-либо были в карманах.

Чтобы сделать это, я написал этот код:

a = [1,2,3,-4,5,-6] 

def find_max_seats(some_list): 
    running_list = [] 
    running_sum = 0 
    for i in some_list: 
     running_sum += i 
     running_list.append(running_sum) 
    return max(running_list) 


print find_max_seats(a) 

Он работает (ответ 7), но имеет быть более элегантным и вещий способ сделать это.

Благодарим за помощь!

+1

Просто используйте 'макс()' с любым из решений там. –

+0

@ 200OK Я не понимаю ... Я уже использую max в своем решении – Optimesh

+1

Решения там используют 'list()' или понимание списка для создания списка с суммарными суммами, так как вам нужен только самый большой элемент не для всех их так просто называть 'max()' there: 'max (accumu (a))'. Это предотвратит создание ненужного списка. –

ответ

1

Это должно работать в Python 3:

from itertools import accumulate 

def find_max_seats(some_list): 
    return max(accumulate(some_list)) 

К сожалению, функция скапливаются не в Python 2.7. Вы можете определить, что-то подобное, как описано в вопросе связанном 200 OK: How to find the cumulative sum of numbers in a list?

Так, например:

def accumulate(xs): 
    total = 0 
    for x in xs: 
     total += x 
     yield total 
+1

Вопрос помечен Python 2.7. –

Смежные вопросы