Сложить элементы списка вместе python - PullRequest
0 голосов
/ 28 мая 2020

У меня есть этот список

r1 = 2
r2 = 4
r3 = 5
r4 = 9 
lst = [r1, r2, r3, r4]

Я хочу создать новый список, который выглядит следующим образом:

new_lst = [r1, r1+r2, r1+r2+r3, r1+r2+r3+r4]

За исключением new_lst r1 называется "x1", r1 + r2 с именем «x2 et c.

Я сейчас делаю это, используя:

new_lst = []
new_lst.append(sum(lst[0:1]))
new_lst.append(sum(lst[0:2]))
new_lst.append(sum(lst[0:3]))    
new_lst.append(sum(lst[0:4]))     

. Затем обратитесь к этому списку, сказав, если« n »находится между 0 и x1, x1 и x1 + x2 и т. д .; выведите yie

 if n >=0 and n <= new_lst[0]:
      print(y)
 elif n >=new_lst[0] and n <= new_lst[1]:
      print(z)

Ответы [ 4 ]

1 голос
/ 29 мая 2020

Почему бы просто не использовать функцию накопительной суммы в numpy?

import numpy as np

print(np.array([2,4,5,9]).cumsum())
1 голос
/ 29 мая 2020

Это может показаться немного непрактичным, но оно включает определение x1, x2, x3 и x4, которые вы упомянули в своем сообщении:

r1 = 2
r2 = 4
r3 = 5
r4 = 9 
lst = [r1, r2, r3, r4]
new_lst = []
s = ''
for n in range(1,len(lst)+1):
    s += f'+r{n}'
    exec(f'x{n}='+s)
    new_lst.append(eval(f'x{n}'))

print(new_lst)

Это не рекомендуется, потому что он использует exe c, что считается плохой практикой, поскольку обычно злоупотребляют выполнением задачи там, где она не нужна, что приводит к потенциальным проблемам безопасности и, как правило, к плохому программированию.

Если возможно, просто определите переменные вручную, или есть способ разрешить python записать их все в отдельный файл, чтобы вы могли скопировать и вставить его в свой основной скрипт.

1 голос
/ 28 мая 2020

Приведенный ниже код создает новый_лист.

lst = [2,4,5,9]
new_lst = [sum(lst[0:i+1]) for i,v in enumerate(lst)]
0 голосов
/ 29 мая 2020

Насколько я могу понять ваш вопрос, я считаю, что следующее соответствует тому, что вы описываете. Он создает от x1 до x4 с помощью простого назначения списка:

r1 = 2
r2 = 4
r3 = 5
r4 = 9

array = [r1, r2, r3, r4]

x1, x2, x3, x4 = [sum(array[0:n + 1]) for n in range(len(array))]

if 0 <= n <= x1:
    print(y)
elif x1 <= n <= x2:
    print(z)

Тот факт, что вам вообще нужно это сделать, наводит на мысль, что вы где-то пошли по неправильному пути. Возможно, вы используете отдельные переменные, где dict подойдет вам лучше.

...