我正在查看常规堆栈溢出用户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
答案 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]