我必须找到嵌套列表行的平均值和中位数,并将字符串作为第一个值,我尝试下面的代码,首先找出它们的总和
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]]
你可以使用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)])
我更喜欢来自@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]]
为了使您的代码工作,只需稍加改动:
for i in x:
y = sum(i[1:])
print(i[0], y)