繁体   English   中英

Python - 列表理解问题:我需要嵌套列表理解吗?

[英]Python - List Comprehension problem: do i need nested List Comprehension?

我是 Python 新手,我不能做这个简单的练习(我现在很简单,但我无法解决它)。 我使用多种组合已经 4 年了,在 SO 和其他论坛中寻求帮助,但对我的问题没有任何帮助,这是我的噩梦:

letters_count = {
    'Alpha': [10, 12, 0, 1],
    'Beta': [15, 7, 9, 2],
    'Gamma': [6],
    'Delta': [2, 2, 4],
    'Eta': [9, 9, 9],
    }

我需要创建一个脚本,从该国家/地区的每个成功估计中减去给定国家/地区的平均值,仅使用列表理解(带括号)并且其输出与此类似:

[['Alpha', [4.25, 6.25, -5.75, -4.75]], 
 ['Beta', [6.75, -1.25, 0.75, -6.25]], 
 ['Gamma', [0]],
 ['Delta', [-0.66, -0.66, 1.33]],
 ['Eta', [0, 0, 0]]]

我想放一些我的代码,但没有一个有效

尝试这个:

[[k,[v[i] - sum(v)/len(v) for i in range(len(v))]] for k, v in letters_count.items()]

或者

[[key, [e-sum(value)/len(value) for e in value]] for key, value in letters_count.items()]

ps 谢谢,约翰

如果您使用的是python3.8,则可以避免多次求平均值。 您可以使用变量 ave(或平均值)并获取列表中每个元素与平均值的距离。 不要忘记将答案四舍五入到小数点后两位。 请注意,运算符是 := 而不是 =

letters_count = {
    'Alpha': [10, 12, 0, 1],
    'Beta': [15, 7, 9, 2],
    'Gamma': [6],
    'Delta': [2, 2, 4],
    'Eta': [9, 9, 9],
    }
result = [[letter, [round((ave - v), 2) for v in lst]] for letter, lst in letters_count.items() if (ave := sum(lst)/len(lst))]
print(result)

结果:

[['Alpha', [-4.25, -6.25, 5.75, 4.75]], 
 ['Beta', [-6.75, 1.25, -0.75, 6.25]], 
 ['Gamma', [0.0]], 
 ['Delta', [0.67, 0.67, -1.33]], 
 ['Eta', [0.0, 0.0, 0.0]]]

因此,与其一开始试图一次性完成所有事情,不如分解问题。

首先,您需要在每个列表中找到平均调整后的值。 看起来像:

adj_avg = lambda vals: [v - sum(vals) / len(vals) for v in vals] 

从那里,很容易添加密钥以使其成为您想要的输出:

[[key, adj_avg(vals)] for key, vals in letters_count.items()]

变成:

[[key, [v - sum(vals) / len(vals) for v in vals]] for key, vals in letters_count.items()]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM