Python 中求和函式 sum 用法

肖老闆發表於2017-03-25

Python 中求和函式 sum 用法

今天在看《集體程式設計智慧》這本書的時候,看到一段Python程式碼,當時是百思不得其解,總覺得是書中排版出錯了,後來去了解了一下sum的用法,看了一些Python大神寫的程式碼後才發現是自己淺薄了!特在此記錄一下。書中程式碼段摘錄如下:


from math import sqrt

def sim_distance(prefs, person1, person2):
    # 得到shared_items的列表
    si = {}
    for item in prefs[person1]:
        if item in prefs[person2]:
            si[item] = 1

    # 如果兩者沒有共同之處,則返回0
    if len(si) == 0: return 0

    # 計算所有差值的平方和
    sum_of_squares = sum([pow(prefs[person1][item] - prefs[person2][item], 2) 
                        for item in prefs[person1] if item in prefs[person2]])

    return 1/(1 + sqrt(sum_of_squares))

自己不明白的程式碼塊就是在計算所有差值的平方和這裡,按照一般語言邏輯,應該是for語句和pow語句位置對調一下啊,很是困惑!後來查閱了一下sum函式的用法才豁然開朗,再次感嘆Python之神(bian)奇(tai)語法。

sum函式的引數是這樣的:sum(iterable[, start]),其中iterable為可迭代物件,可以是listtuple或者dictionary等。

sum函式最後的值 = 可迭代物件裡面的數相加的值 + start的值,其中start可以不寫,預設為0。講到這裡,那麼我們怎麼去理解上面計算所有差值的平方和這段程式碼呢?其實很簡單,看看下面這段程式碼,然後再回去看上面那段程式碼就會柳暗花明了!

from math import sqrt
a = range(1, 11)
b = range(1, 10)
c = sum([item for item in a if item in b])
print c

可以自己輸入這段簡單的程式碼執行試試,最終的結果是:45

補充一點:"item for item in a if item in b" 這種表示式叫作列表推導式,是在一組字串或者一組物件上執行一條相同操作的簡潔寫法!

最後的最後:人生苦短,我用Python.

相關文章