这是提供的数据。
# 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]]
我在求平方和时遇到了很多麻烦。对所有这些值求和很容易,但在求和之前如何对元素求平方?
您可以使用生成器表达式来计算每个国家/地区的平方估计值之和。
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]]
您可以使用字典
.items()
可迭代,然后对字典键中的项目的平方求和;例如,
[(k, sum([x * x for x in v])) for k, v in success_estimates.items()]
让我们稍微分解一下。我们如何使用列表理解来获取数字列表的平方列表?
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
字典的键列表很有帮助。