我必须使用字符串作为第一个值来查找嵌套列表行的均值和中值,我尝试使用下面的代码来首先求出它们的总和
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]]
答案 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)