我试图理解内置sum()函数的工作原理,但是,start参数已经蒸发了我的大脑:
我只是被这件事吓呆了,完全不知道发生了什么。下面是python必须说的话:http://docs.python.org/library/functions.html#sum。这并没有给出任何关于“如果开始不是字符串而不是整数”的解释。
发布于 2012-08-30 17:36:22
Sum做了这样的事情
def sum(values, start = 0):
total = start
for value in values:
total = total + value
return totalsum([1,2],[3,4])扩展了类似于[3,4] + 1 + 2的内容,您可以看到它试图将数字和列表添加到一起。
为了使用sum生成列表,值应该是一个列表列表,而start可以只是一个列表。您将在失败的示例中看到,列表至少包含一些in,而不是所有列表。
通常情况下,在列表中使用sum是将列表列表转换为列表。
sum([[1,2],[3,4]], []) == [1,2,3,4]但你真的不应该这么做,因为这会很慢。
发布于 2012-08-30 17:36:02
a=[[1, 20], [2, 3]]
b=[[[[[[1], 2], 3], 4], 5], 6]
sum(b, a)此错误与start参数无关。列表b中有两个项。其中一个是[[[[[1], 2], 3], 4], 5],另一个是6,不能将列表和int添加到一起。
sum(a, b)这是在补充:
[[[[[[1], 2], 3], 4], 5], 6] + [1, 20] + [2, 3]它可以正常工作(因为您只是在向列表中添加列表)。
a=[1,2]
b=[3,4]
sum(a,b)这是在尝试添加[3,4] + 1 + 2,这也是不可能的。类似地,sum(b,a)正在添加[1, 2] + 3 + 4。
如果开始不是字符串,也不是整数,怎么办?
sum不能和字符串。请参见:
>>> sum(["a", "b"], "c")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: sum() can't sum strings [use ''.join(seq) instead]发布于 2017-01-27 15:24:21
其他答案中所暗示但没有明确说明的事情之一是,start 值定义了返回值和被加总项的。因为缺省值是start=0,(当然,0是整数),可迭代中的所有项都必须是整数(或者使用与整数一起工作的__add__方法的类型)。其他例子提到了连接列表:
(sum([[1,2],[3,4]], []) == [1,2,3,4])
或timedate.timedelta对象:
(sum([timedelta(1), timedelta(2)], timedelta()) == timedelta(3))。
请注意,这两个示例都在迭代参数中传递一个类型为空的对象作为开始参数,以避免获得TypeError: unsupported operand type(s) for +: 'int' and 'list'错误。
https://stackoverflow.com/questions/12202311
复制相似问题