#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)))