基于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为可迭代对象,可以是list、tuple或者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中求和函数sum的用法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!

稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!

昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。

这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。

而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?