Суммируйте элементы вложенного списка и создайте новый список - PullRequest
0 голосов
/ 07 апреля 2020

Я хочу создать новый список.

В новом списке будет 4 элемента.

X = [0, 1, 2, 3] 

Каждый из 4 элементов будет суммой из 50 списков в большем списке.

Этот большой список содержит 50 элементов всего списка. Внутри каждого из 50 вложенных списков.

Каждый из вложенных списков имеет эти 5 элементов

Nestedlist = [str, int, int, float, float] 

['Ohio', 11568495, 11568495, 262851.0, 44824.9]

В этой части я отсортировал данные и заменил элементы 1-4 в 50 вложенных списках на целые и плавающие числа.

Вот как я превратил элементы 1-4 в int и float:

for i, sd in enumerate(statesData):  
    sd = sd.strip().split(',')
    if i:  # omit element 0
        sd[1:] = int(sd[1]), int(sd[1]), float(sd[3]), float(sd[4])
    statesData[i] = sd

Теперь я хочу найти сумму элементов 1 2 3 4 во вложенных списках и создать новый список X (показано выше):

Вот что у меня есть:

sums = []
for e in statesData:
    if e:  
        e = sum(e[1]), sum(e[2]), sum(e[3]), sum(e[4])
        sums.append(e)

Вывод должен выглядеть так:

sums = [sum all nested lists element 1, sum of nested lists element 2, sum of nested lists element 3, sum of nested lists element 4]

вывод, который я получаю is

unsupported operand type for +: int and str

Как взять определенные элементы c из нескольких вложенных списков и использовать их?

Если я хочу использовать каждый элемент 2 списков 1:50 внутри список X

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

Ответы [ 2 ]

0 голосов
/ 07 апреля 2020

Вы можете использовать zip и map для применения операций в направлении по столбцам:

allStates = list(map(sum,[*zip(*statesData)][1:]))
0 голосов
/ 07 апреля 2020

Проблема для вашей декларации l oop,

for e in range(len(statesData)):

Если len(statesData) равно 4, то e будет 0,1,2,3 во время выполнения l oop , Тем не менее, код обрабатывает e как список, индексируя его здесь несколько раз:

e[1:5] = sum(e[1]), sum(e[2]), sum(e[3]), sum(e[4])

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

Было бы полезно, если бы я мог видеть, как выглядит StatesData. Но, предполагая, что вы хотите получить его кусками по 4, вы могли бы сделать что-то вроде этого ...

for e in range(0, len(statesData), 4):
   newVal = sum(statesData[e], statesData[e+1], statesData[e+2], statesData[e+3])
   sums.append(e)

Это для l oop считается на 4, так что е будет 0, 4, 8, et c. Затем он использует e в качестве индекса для получения 4 значений statesData. Итак, первое l oop получает 0,1,2,3 и суммирует их. Затем он получает 4,5,6,7 и суммирует их, и так далее, и так далее. Затем он добавляет это суммирование в список сумм. Я не уверен, что это именно то, что вы ищете, поэтому дайте мне знать, где я ошибся. Но указанная c ошибка типа int не является допустимой, появляется из-за того, что e объявлена ​​как int в for l oop.

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