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

时间:2019-03-01 11:26:38

标签: python python-3.x list

我必须使用字符串作为第一个值来查找嵌套列表行的均值和中值,我尝试使用下面的代码来首先求出它们的总和

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 :(得分: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 :(得分: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]]

答案 2 :(得分:0)

要使您的代码正常工作,请进行一些更改:

for i in x:
    y = sum(i[1:])
    print(i[0], y)