AnswerBun.com

Посчитать префиксные суммы с конца. Python

Решаю задачу.
Есть массив префиксных сумм [0,2,5,10,13] (для чисел 2,3,5,3 соответственно). Мне нужно посчитать сумму последних k элементов. Допустим k = 2. Значит с конца массива нужно посчитать (13 – 10) + (10-5) = 8. Не могу реализовать это в коде, как сделать?
Вот мой код:

n = int(input())
a = []
rez = []#ответы
pref = [0]#суммы
for i in range(n):
    b = input()
    if b[0] == "-":#если просят удалить
        rez.append(a.pop())
    elif b[0] == "+":#если просят добавить
        a.append(int(b[1:]))
        pref.append(pref[-1]+int(b[1:]))
    elif b[0] == "?":#если просят вывести сумму последних k эдементов
        k = int(b[1:])
        #print(a)
        rez.append(sum(a[-k:]))

for i in rez:#выводим ответы
    print(i)

2 Answers

Ну вот пусть будет без Numpy, на основании кода @strawdog и @MaxU:

sums = [0,2,5,10,13] # ваши суммы
k = 2 # ваше k

res = sum([y - x for x, y in zip(sums[-k-1:], sums[-k:])])
print(res)
# 8

Хотя да, прав @extrn, на самом деле суммы тут вообще не нужны, нужно просто два элемента вычесть, только сообразить какие.

Answered by CrazyElf on December 29, 2020

Вам наверняка предложат "ванильное" решение, но мне это не интересно, поэтому вот вам с numpy, например:

import numpy as np

sums = [0,2,5,10,13] # ваши суммы
k = 2 # ваше k

res = sum(np.diff(sums,1)[-k:])
print(res)
# 8

Answered by strawdog on December 29, 2020

Add your own answers!

Related Questions

fetch данных в select react

1  Asked on January 20, 2021 by max-akinshin

     

Почему отстает state? React

2  Asked on January 19, 2021 by bazmexes

   

Вопрос по метаклассам

1  Asked on January 18, 2021 by user364464

   

GULP создание 2 файлов

2  Asked on January 18, 2021 by casket

 

Ask a Question

Get help from others!

© 2022 AnswerBun.com. All rights reserved.