Python代碼閱讀(第94篇):加權均值

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)
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容