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 :
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]))
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)]
ans = [] for i in range(len(lists)): ans.append(sum(lists[:i+1]))
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)
Est-ce que treyhunner.com/2015/12/python-list- Comprends-maintenant-en-col ou aide?