除了每个列表的第一个值之外的嵌套列表行的总和

问题描述 投票:1回答:3

我必须找到嵌套列表行的平均值和中位数,并将字符串作为第一个值,我尝试下面的代码,首先找出它们的总和

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]]
python python-3.x list
3个回答
2
投票

你可以使用iterable unpacking

>>> [[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)])

1
投票

我更喜欢来自@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
投票

为了使您的代码工作,只需稍加改动:

for i in x:
    y = sum(i[1:])
    print(i[0], y)
© www.soinside.com 2019 - 2024. All rights reserved.