1
votes

Expliquer la compréhension de la liste en somme cumulée de la liste

Code Python pour obtenir la somme cumulée d'une liste
def cum_sum(m):
    result = 0
    for x in m:
        result += x
        print(result, end=", ")


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

Quelqu'un peut-il m'aider à développer la compréhension de la liste ci-dessus?

J'ai écrit ce code

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


4 Réponses :


0
votes

utiliser un générateur

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


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


0 commentaires

0
votes

cette partie de votre code

from itertools import accumulate


lists = [10, 20, 30, 40, 50]
print(list(accumulate(lists)))
# [10, 30, 60, 100, 150]

crée une nouvelle liste à partir du premier élément des listes jusqu'au (et excluant) le x code> 'e élément de votre liste (voir par exemple Python List Slicing ). puis il prend la somme dessus .

donc il crée inutilement plusieurs listes et fait des sommes inutiles (il pourrait garder la somme jusqu'à l'élément x en mémoire et ajouter simplement l'élément suivant - comme le font la plupart des solutions présentées ici) .

vous obtenez cela gratuitement avec itertools.accumulate déjà:

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


0 commentaires

0
votes
ans = []
for i in range(len(lists)):
    ans.append(sum(lists[:i+1]))

0 commentaires

0
votes

Voici la forme développée de la compréhension de liste:

cu_list = []
for x in range(0, length+1):
    s = sum(lists[0:x:1])
    cu_list.append(s)


0 commentaires