如何在 Python 中使用列表推导式计算列表中的平方和?

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

这是提供的数据。

# Data on probability of expansion success by country estimates
success_estimates = {
    'Australia': [0.6, 0.33, 0.11, 0.14],
    'France': [0.66, 0.78, 0.98, 0.2],
    'Italy': [0.6],
    'Brazil': [0.22, 0.22, 0.43],
    'USA': [0.2, 0.5, 0.3],
    'England': [0.45],
    'Canada': [0.25, 0.3],
    'Argentina': [0.22],
    'Greece': [0.45, 0.66, 0.75, 0.99, 0.15, 0.66],
    'Morocco': [0.29],
    'Tunisia': [0.68, 0.56],
    'Egypt': [0.99],
    'Jamaica': [0.61, 0.65, 0.71],
    'Switzerland': [0.73, 0.86, 0.84, 0.51, 0.99],
    'Germany': [0.45, 0.49, 0.36]
}

这是练习题,也是我最接近但不成功的代码的副本。

使用列表推导式,编写一个脚本来创建一个名为 sum_squares_list 的列表列表,其中列表的每个元素都是一个包含两项的列表 [国家/地区名称、值]。列表中的值项应该是该国家/地区成功估计的平方和。例如,sum_squares_list 的一个元素应该是牙买加,其中两项列表是 [牙买加,1.2987](因为 1.2987 = 0.61^2 + 0.65^2 + 0.71^2)。

我最接近但不正确的代码

sum_squares_list = [[i, sum(success_estimates[i])] for i in success_estimates]
sum_squares_list

[['Australia', 1.1800000000000002],
 ['France', 2.62],
 ['Italy', 0.6],
 ['Brazil', 0.87],
 ['USA', 1.0],
 ['England', 0.45],
 ['Canada', 0.55],
 ['Argentina', 0.22],
 ['Greece', 3.66],
 ['Morocco', 0.29],
 ['Tunisia', 1.2400000000000002],
 ['Egypt', 0.99],
 ['Jamaica', 1.97],
 ['Switzerland', 3.9299999999999997],
 ['Germany', 1.2999999999999998]]

我在求平方和时遇到了很多麻烦。对所有这些值求和很容易,但在求和之前如何对元素求平方?

python statistics data-science list-comprehension
3个回答
2
投票

您可以使用生成器表达式来计算每个国家/地区的平方估计值之和。

sum_squares_list = [[country, sum(estimate ** 2 for estimate in estimates)] 
                    for country, estimates in success_estimates.items()]
>>> sum_squares_list
[['Australia', 0.5005999999999999],
 ['France', 2.0444],
 ['Italy', 0.36],
 ['Brazil', 0.28169999999999995],
 ['USA', 0.38],
 ['England', 0.2025],
 ['Canada', 0.1525],
 ['Argentina', 0.0484],
 ['Greece', 2.6388],
 ['Morocco', 0.0841],
 ['Tunisia', 0.7760000000000001],
 ['Egypt', 0.9801],
 ['Jamaica', 1.2987],
 ['Switzerland', 3.2183],
 ['Germany', 0.5722]]

0
投票

您可以使用字典

.items()
可迭代,然后对字典键中的项目的平方求和;例如,

[(k, sum([x * x for x in v])) for k, v in success_estimates.items()]

0
投票

让我们稍微分解一下。我们如何使用列表理解来获取数字列表的平方列表?

list = [0.45, 0.66, 0.75, 0.99, 0.15, 0.66]

squares = [x * x for x in list]

我们如何总结呢?

list = [0.45, 0.66, 0.75, 0.99, 0.15, 0.66]

sum_of_squares = sum([x * x for x in list])

我们可以省略大括号,将列表理解转换为生成器表达式。

list = [0.45, 0.66, 0.75, 0.99, 0.15, 0.66]

sum_of_squares = sum(x * x for x in list)

现在,您只需将其应用到这个问题上即可。您可能会发现处理

success_estimates
字典的键列表很有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.