Python 代码阅读合集介绍:为什么不推荐Python初学者直接看项目源码
本篇阅读的代码实现了计算加权均值的功能。
本篇阅读的代码片段来自于30-seconds-of-python。
weighted_average
def weighted_average(nums, weights):
return sum(x * y for x, y in zip(nums, weights)) / sum(weights)
# EXAMPLES
weighted_average([1, 2, 3], [0.6, 0.2, 0.3]) # 1.72727
weighted_average
函数接收一个待求均值的数字列表nums
和一个对应的权重列表weights
,返回加权均值。
函数使用zip()
将两个列表组合提取,同时获得nums
的当前值和对应的权重。再使用列表推导式迭代所有值和权重对,并将其两两相乘生成一个新的列表。最后使用sum()
函数计算新列表元素的和,除以权重的和,计算出加权均值。
zip(*iterables)
创建一个聚合了来自每个可迭代对象中的元素的迭代器。返回一个元组的迭代器,其中的第i
个元组包含来自每个参数序列或可迭代对象的第i
个元素。 当所输入可迭代对象中最短的一个被耗尽时,迭代器将停止迭代。 当只有一个可迭代对象参数时,它将返回一个单元组的迭代器。 不带参数时,它将返回一个空迭代器。 相当于:
def zip(*iterables):
# zip('ABCD', 'xy') --> Ax By
sentinel = object()
iterators = [iter(it) for it in iterables]
while iterators:
result = []
for it in iterators:
elem = next(it, sentinel)
if elem is sentinel:
return
result.append(elem)
yield tuple(result)