Как получить общую сумму в нескольких списках с помощью python
[templatetag.py]
def total_sum(value):
value_list = value[:, 1:]
return [sum(i) for i in zip(*value_list)]
[html]
{% load total_sum from templatetag %}
<tr>
<td>Monthly Total</td>
<td>{{ monthly_enroll_list|total_sum }}</td> <!-- Total (Jan) -->
<td>{{ monthly_enroll_list }}</td> <!-- Total (Feb) -->
<td>{{ monthly_enroll_list }}</td> <!-- Total (Mar) -->
<td>{{ monthly_enroll_list }}</td>
<td>{{ monthly_enroll_list }}</td>
<td>{{ monthly_enroll_list }}</td>
<td>{{ monthly_enroll_list }}</td>
<td>{{ monthly_enroll_list }}</td>
<td>{{ monthly_enroll_list }}</td>
<td>{{ monthly_enroll_list }}</td>
<td>{{ monthly_enroll_list }}</td>
<td>{{ monthly_enroll_list }}</td>
</tr>
- The value of the "monthy_enroll_list" variable is as follows.
[['A', 3, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 8], ['B', 1, 8, 6, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1],
- If I remove the index at the beginning and the end of each list, I get the number of enrolls from January to December. I want to get the total sum per month. The values I want to get are:
['6', '10', '12', '6', '0', '0', '0', '0', '0', '0', '0', '0']
- But i got the following error:
индексы списка должны быть целыми числами или срезами, а не кортежами
Спасибо, что сообщили мне, как решить эту проблему
Проблема заключается в функции zip, которую вы вызываете.
Взяв вашу функцию, давайте сосредоточимся на части zip:
# your current function
def total_sum(value):
value_list = value[:, 1:]
return [sum(i) for i in zip(*value_list)]
Предположим, что наше значение равно:
v = [[1,2,3], [4,5,6], [7,8,9]]
Если мы делаем:
print(list(zip(*v))
Получаем:
>>> [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
Это не то, что мы можем вызвать sum, поскольку вы пытаетесь суммировать список кортежей.
Так что вместо
return [sum(i) for i in zip(*value_list)]
в последней строке функции, вы можете изменить это на:
total = 0
for inner_list in values_list:
total += sum(inner_list)
return total
Ваша новая функция, таким образом, будет выглядеть так:
def total_sum(value):
value_list = value[:, 1:]
total = 0
for inner_list in values_list:
total += sum(inner_list)
return total