sum()函数中使用的[]参数或输入-它在做什么?

时间:2019-05-07 16:59:03

标签: python

我正在查看常规堆栈溢出用户Peter Norvig的以下页面:http://norvig.com/sudoku.html

在此代码中,Peter使用了以下代码:

peers = dict((s, set(sum(units[s], [])) - set([s])) for s in squares)

units是数独板上“列”,“行”和“ 9 * 9正方形”的字典,squares是所有可能的行/列组合。

我不理解总和符号sum(units[s], []),如果我删除了, []短语,则会出现错误:

  

“ +不支持的操作数类型:'int'和'list'”

使用help(sum)返回

  

sum(可迭代,start = 0,/)

     

返回“起始”值(默认值:0)加上可迭代数字的和

     

当iterable为空时,返回起始值。      此功能专门用于数字值,并且可能      拒绝非数字类型。

所以我的问题是,“ []在此功能中做什么?”显然,这是一个空列表,但这是sum()函数的参数还是添加到units[s]的值? python文档对此相对“安静”,除非我根本不理解它。...https://docs.python.org/3/library/functions.html#sum

2 个答案:

答案 0 :(得分:5)

Sum使用+运算符进行求和。 +list中过载以扩展列表

>>> sum([[1,2], [3,4], [5,6]], [])
[1, 2, 3, 4, 5, 6]

因此sum(units[s], [])试图将可迭代项(units[s])合并为list

您可能会收到此错误,可能是由于某种原因,units[s]是整数,而应该是list

答案 1 :(得分:3)

  

sum()函数的参数还是添加到units[s]的值?

两者都是 :您将其作为参数传递给函数,然后函数执行自己的业务,并且根据文档,“返回”“起始”值加上一个可迭代的数字”,即:

sum([1,2,3,4,5], start) == start + 1 + 2 + 3 + 4 + 5

数字以外的其他一些类型也支持加法,例如列表:

[] + [1] + [2,3] == [1, 2, 3]