Объясните понимание списка в совокупной сумме списка - PullRequest
1 голос
/ 17 июня 2020

Python код для получения кумулятивной суммы списка

def Cumulative(lists): 
    cu_list = [] 
    length = len(lists) 
    cu_list = [sum(lists[0:x:1]) for x in range(0, length+1)] 
    return cu_list[1:] 

# Driver Code 
lists = [10, 20, 30, 40, 50] 
print (Cumulative(lists)) 

Может ли кто-нибудь помочь мне расширить понимание приведенного выше списка?

Я написал этот код

def cum_sum(m):
    result = 0
    for x in m:
        result += x
        print(result, end=", ")


cum_sum([1,2,3,10])

Ответы [ 4 ]

1 голос
/ 17 июня 2020

Это развернутая форма понимания списка:

cu_list = []
for x in range(0, length+1):
    s = sum(lists[0:x:1])
    cu_list.append(s)
0 голосов
/ 17 июня 2020

эта часть вашего кода

[sum(lists[0:x:1]) for x in range(0, length+1)]

создает новый список, начиная с первого элемента lists до (и исключая) x -го элемента вашего списка (см., Например, Python Нарезка списка ). тогда он берет sum поверх него.

, поэтому он без необходимости создает несколько списков и производит ненужные суммы (он может сохранить сумму до элемента x в памяти и просто добавить следующий элемент - как и большинство решений, представленных здесь).

вы получаете это бесплатно с itertools.accumulate уже:

from itertools import accumulate


lists = [10, 20, 30, 40, 50]
print(list(accumulate(lists)))
# [10, 30, 60, 100, 150]
0 голосов
/ 17 июня 2020
ans = []
for i in range(len(lists)):
    ans.append(sum(lists[:i+1]))
0 голосов
/ 17 июня 2020

использовать генератор

def cum_sum(m):
    result = 0
    for x in m:
        result += x
        yield result


list(cum_sum([1,2,3,10]))
...