首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python求和函数-所需的“开始”参数说明

python求和函数-所需的“开始”参数说明
EN

Stack Overflow用户
提问于 2012-08-30 17:28:03
回答 4查看 4.5K关注 0票数 6

我试图理解内置sum()函数的工作原理,但是,start参数已经蒸发了我的大脑:

  1. a=[1,20,2,3] b=[ 1,2],3],4],5],6] >>> sum(b,a)回溯(最近一次调用):File“,第1行,TypeError:只能串联列表(不包括"int")以列出>>> sum(a,b) [ 1,2],3],4],5],6,1,20,2,3]
  2. a=1,2 >>> b=3,4 >>> sum(a,b)跟踪(最近调用的最后一次调用):文件“,第一行,在TypeError:只能连接列表(而不是"int")中列出>>>和(b,a)回溯(最近调用):File”,第1行,在TypeError:只能串联列表(不能"int")到列表

我只是被这件事吓呆了,完全不知道发生了什么。下面是python必须说的话:http://docs.python.org/library/functions.html#sum。这并没有给出任何关于“如果开始不是字符串而不是整数”的解释。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-08-30 17:36:22

Sum做了这样的事情

代码语言:javascript
运行
复制
def sum(values, start = 0):
    total = start
    for value in values:
        total = total + value
    return total

sum([1,2],[3,4])扩展了类似于[3,4] + 1 + 2的内容,您可以看到它试图将数字和列表添加到一起。

为了使用sum生成列表,值应该是一个列表列表,而start可以只是一个列表。您将在失败的示例中看到,列表至少包含一些in,而不是所有列表。

通常情况下,在列表中使用sum是将列表列表转换为列表。

代码语言:javascript
运行
复制
sum([[1,2],[3,4]], []) == [1,2,3,4]

但你真的不应该这么做,因为这会很慢。

票数 21
EN

Stack Overflow用户

发布于 2012-08-30 17:36:02

代码语言:javascript
运行
复制
a=[[1, 20], [2, 3]]
b=[[[[[[1], 2], 3], 4], 5], 6]
sum(b, a)

此错误与start参数无关。列表b中有两个项。其中一个是[[[[[1], 2], 3], 4], 5],另一个是6,不能将列表和int添加到一起。

代码语言:javascript
运行
复制
sum(a, b)

这是在补充:

代码语言:javascript
运行
复制
[[[[[[1], 2], 3], 4], 5], 6] + [1, 20] + [2, 3]

它可以正常工作(因为您只是在向列表中添加列表)。

代码语言:javascript
运行
复制
a=[1,2]
b=[3,4]
sum(a,b)

这是在尝试添加[3,4] + 1 + 2,这也是不可能的。类似地,sum(b,a)正在添加[1, 2] + 3 + 4

如果开始不是字符串,也不是整数,怎么办?

sum不能和字符串。请参见:

代码语言:javascript
运行
复制
>>> 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]
票数 5
EN

Stack Overflow用户

发布于 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'错误。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12202311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档