Как накапливать сумму в каждом индексируемом элементе в цикле [python]? - PullRequest
0 голосов
/ 30 ноября 2018

Цикл проходит через список номеров.Мне нужно использовать map для накопления суммы всех элементов [0] в элементе другого списка [0], суммы всех элементов [1] в элементе [1].

result_list = []
sub1 = sub2 = sub3 = 0 #these 3 should be only indexes 0,1,2 of list above
for item in r:        
    l = item.split(';') # originally l = '34;56;78'
    q = list(map(float,l)) # q is the list of  3 elements

    #instead of code below I want to have smth like
    # result_list = list(map( sum( q(item), result_list)
    sub1 += q[0]
    sub2 += q[1]
    sub3 += q[2]

Ввод:

l = [['1;2;3'], ['10;20;30'], ['12;34;56']]

result_list должен агрегировать сумму всех элементов [0] в каждом списке в result_list [0].Вывод

result_list[0] = 1+ 10 + 12 
result_list[1] = 2 + 20 + 34
result_list[2] = 3 + 30 + 56

r - это, я опускаю имена и вычисляю среднее значение для каждого «столбца».

Bawerman;55;79;50
Baldwin;83;62;72
Owen;94;86;65
Watson;92;79;100
Clifford;33;99;47
Murphy;94;87;53
Shorter;83;61;61
Bishop;27;89;41

Ответы [ 5 ]

0 голосов
/ 30 ноября 2018

csv.reader + zip + statistics.mean

Я опускаю имена и вычисляю среднее значение для каждого 'столбец '

Вам не нужно составлять большой список списков из ваших данных.Вы можете использовать итератор и распаковывать последовательность с помощью zip.Для вычисления среднего вы можете использовать statistics.mean:

from io import StringIO
from statistics import mean
import csv

x = StringIO("""Bawerman;55;79;50
Baldwin;83;62;72
Owen;94;86;65
Watson;92;79;100
Clifford;33;99;47
Murphy;94;87;53
Shorter;83;61;61
Bishop;27;89;41""")

# replace x with open('file.csv', 'r')
with x as fin:
    reader = csv.reader(x, delimiter=';')
    zipper = zip(*reader)
    next(zipper)  # ignore labels
    res = [mean(map(float, x)) for x in zipper]

print(res)

# [70.125, 80.25, 61.125]
0 голосов
/ 30 ноября 2018

Это один подход.

Пример:

l = [["1;2;3"], ["10;20;30"], ["12;34;56"]]
result_list = []

l = [list(map(float, j.split(";"))) for i in l for j in i]
for i in zip(*l):
    result_list.append(sum(i))
print(result_list)

Выход:

[23.0, 56.0, 89.0]
0 голосов
/ 30 ноября 2018

Один пользователь может выполнить работу:

Если вам нужно сначала проанализировать строки с номерами:

l = [[int(i) for i in e[0].split(';')] for e in l] 

И после этого просто:

result = map(sum, zip(*l))
0 голосов
/ 30 ноября 2018

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

l = [['1;2;3'], ['10;20;30'], ['12;34;56']]
numbers = (map(float, e.split(';')) for e, in l)
result = [sum(n) for n in zip(*numbers)]
print(result)

Выход

[23.0, 56.0, 89.0]
0 голосов
/ 30 ноября 2018

Использование списка понимания: [sum(sub_list) for sub_list in l]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...