Добавить элементы из списка на основе второго списка в Python - PullRequest
0 голосов
/ 01 декабря 2018

У меня есть два списка.Я хочу добавить значения в ВП на основе цвета списка.Итак, я хочу этот вывод:

total = [60,90,60]

Поскольку я хочу, чтобы код выполнялся следующим образом: total = [10+20+30, 40+50,60]

total = []
vp = [10,20,30,40,50,60]
color = [3,2,1]

Я не знаю, как это сделать.Я начал что-то подобное в python3:

for c, v in zip(color, Vp):
    total.append ....

спасибо

Ответы [ 5 ]

0 голосов
/ 01 декабря 2018

Другой вариант - построить список с кусочками, затем сопоставить с суммой:

Разрушительный:

slices = []
for x in color:
  slices.append(vp[0:x])
  del vp[0:x]
sums = [sum(x) for x in slices]

print (sums) #=> [60, 90, 60]

Неразрушающий:

slices = []
i = 0
for x in color:
  slices.append(vp[i:x+i])
  i += x
sums = [sum(x) for x in slices]

print (sums) #=> [60, 90, 60]
0 голосов
/ 01 декабря 2018

Использование списочных представлений -

vp = [10,20,30,40,50,60]
color = [3,2,1]
commu = np.cumsum(color)    # Get the commulative sum - [3,5,6]
commu = list([0])+list(commu[0:len(commu)-1])    # [0,3,5] and these are the beginning indexes 
total=[sum(vp[commu[i]:commu[i+1]]) if i < (len(range(len(commu)))-1) else sum(vp[commu[i]:]) for i in range(len(commu))]
total
   [60, 90, 60]
0 голосов
/ 01 декабря 2018

Вы можете поэкспериментировать со списками, чтобы собрать элементы из исходного списка на основе содержимого в другом списке, суммировать его и добавить в окончательный список:

total = []
vp = [10,20,30,40,50,60]
color = [3,2,1]

i = 0
for x in color:
    total.append(sum(vp[i:i+x]))
    i += x

print(total)
# [60, 90, 60]
0 голосов
/ 01 декабря 2018

Этот ответ не идеален для этого примера, но может быть полезен в других ситуациях, когда вы хотите преобразовать плотное представление в разреженное представление.В этом случае мы конвертируем 1D массив в 2D массив с отступом.Например, вы хотите иметь возможность использовать np.sum:

total = []
vp = [10,20,30,40,50,60]
color = [3,2,1]

# padding (numpy friendly)
max_len = max(color)
vp_with_padding = [
    vp[sum(color[:i]):sum(color[:i])+l] + [0] * (max_len - l)
    for i, l in enumerate(color)
]
# [[10, 20, 30], [40, 50, 0], [60, 0, 0]]
total = np.sum(vp_with_padding, 1)
# similar to:
#total = [sum(x) for x in vp_with_padding]
0 голосов
/ 01 декабря 2018
total = []
index = 0
for c in color:
  inside = 0
  for i in range(c):
    inside += vp[index + i]
    index += 1
  total.append(inside)
print(total)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...