Работа со списками: возможно ли ускорить этот фрагмент кода?

#python #list

#python #Список

Вопрос:

Рассмотрим следующий вопрос:

У нас есть (большой) список, скажем a , ненулевых целых чисел, и мы хотим найти максимум всех суммаций от 1-го элемента до i-го элемента списка для 0 <= i < len(a) . Для этого я написал свой код следующим образом:

 import itertools
a = [1, 2, 3, -4, -5, -6, 7, 8, -9, 10, -11]
groups = (group for key, group in itertools.groupby(a, lambda x: x > 0)) # Gathering consecutive integers of the same sign suffices and make the code faster.
summations = [sum(group) for group in groups]
b = []
for i in range(len(summations)):
    b.append(sum(summations[ :i   1]))
print(max(b))
  

Теперь мой вопрос: я хочу сделать это быстрее. Есть ли способ? Например, я пытался сохранить суммирование как a generator , но я не мог перебрать это.

Ответ №1:

Вы смотрели itertools.accumulate() ?

 import itertools

a = [1, 2, 3, -4, -5, -6, 7, 8, -9, 10, -11]

print(max(itertools.accumulate(a)))