Сумма строк вложенного списка, кроме первого значения каждого списка - PullRequest
0 голосов
/ 01 марта 2019

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

x = [['aus', 1, 2, 7, 4, 5], ['argentina', 1, 1, 3, 4, 5], ['nigeria',   1, 2, 6, 4, 4]]
for i in x:
    y=list(map(sum, i[1:]))
    print(y)

, но там написано

TypeError: объект 'int' не повторяется

результат должен быть

[['aus',26], ['argentina', 14], ['nigeria', 17]]

Ответы [ 3 ]

0 голосов
/ 01 марта 2019

Я предпочитаю более элегантный ответ из @ BradSolomon , но если итеративная распаковка кажется непонятной, вы можете быть немного более явным и отрезать часть списка, которую хотите суммировать.Также вы можете использовать модуль statistics для среднего и медианного значения.

from statistics import mean, median

nums = [['aus', 1, 2, 7, 4, 5], ['argentina', 1, 1, 3, 4, 5], ['nigeria', 1, 2, 6, 4, 4]]

sums = [[n[0], sum(n[1:])] for n in nums]
print(sums)
# [['aus', 19], ['argentina', 14], ['nigeria', 17]]

means = [[n[0], mean(n[1:])] for n in nums]
print(means)
# [['aus', 3.8], ['argentina', 2.8], ['nigeria', 3.4]]

medians = [[n[0], median(n[1:])] for n in nums]
print(medians)
# [['aus', 4], ['argentina', 3], ['nigeria', 4]]
0 голосов
/ 02 марта 2019

Чтобы ваш код работал, просто внесите небольшие изменения:

for i in x:
    y = sum(i[1:])
    print(i[0], y)
0 голосов
/ 01 марта 2019

Вы можете использовать повторяемую распаковку :

>>> [[i, sum(j)] for i, *j in x]
[['aus', 19], ['argentina', 14], ['nigeria', 17]]

Если вы хотите придерживаться явного цикла for ближе к вашей текущей форме, вам не нужно map() здесь,Просто возьмите сумму всего, кроме 0-го элемента:

>>> s = []
>>> for i in x:
...     s.append([i[0], sum(i[1:])])
... 
>>> s
[['aus', 19], ['argentina', 14], ['nigeria', 17]]

Использование распаковки:

>>> for i, *j in x:
...     s.append([i, sum(j)])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...