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)