内置函数sum与sum(list,[])

sum(iterable[, start]) 
     
从左到右汇总start和iterable的项目   返回总数。 start默认为0。可迭代的项目是   通常是数字,start值不允许是字符串。
     
对于某些用例,sum()有很好的替代方案。连接字符串序列的首选快速方法是调用   ''.join(sequence)。要使用扩展名添加浮点值   精度,见math.fsum()。要连接一系列迭代,   考虑使用itertools.chain()。

 

但是,您可以使用其他内容+,例如列表:
>>> ['foo'] + ['bar']
['foo', 'bar']
如果您尝试使用sum,但期望得到相同的结果,则会得到TypeError:
>>> sum((['foo'], ['bar']))

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    sum((['foo'], ['bar']))
TypeError: unsupported operand type(s) for +: 'int' and 'list'
因为它现在在做0 + ['foo'] + ['bar']。 
要解决此问题,您可以提供自己的start作为[],因此它会变为[] + ['foo'] + ['bar']并且一切都很好。所以回答:
  
为什么可以在这里写[]?
因为虽然start默认为数字,但 为1;其他的东西也可以添加,这对于的东西来说非常方便,就像你现在正在做的那样。

答案 1 :(得分:5)
实际上sum函数在每次迭代中使用可迭代的所有项调用__add__的{​​{1}}属性。
例如:
start
在这种情况下,结果将是输入列表的连接列表。实际上,在算法视角下,它执行以下过程:
>>> [].__add__([2,3])
[2, 3]
#OR
>>> [] + [1,2,3]
[1, 2, 3]
并非您可以在具有>>> a = [[1, 2], [3, 4], [5, 6]] >>> start = [] >>> for i in a: ... start += i ... >>> start [1, 2, 3, 4, 5, 6] 属性的每个对象序列上调用sum函数。但请注意,如果您的默认__add__参数为start object不是一个整数,它会引发0。在这种情况下,您需要为函数指定正确的TypeError。 
start

答案 2 :(得分:2)
将start与您提供的可迭代内容相加作为第一个参数。 sum不会将type start限制为int,以便允许添加各种情况。 
基本上,sum会做这样的事情:
a = [[1, 2], [3, 4], [5, 6]]
sum(a, number)
大致翻译为:
number += every value in the list a
由于列表a中的每个值都是一个列表,因此在扩展时,前一个求和值如下:
number + [1, 2] + [3, 4] + [5, 6]
因此,如果您输入int,则会导致不幸TypeError,因为不允许添加int和list。 
1 + [1, 2] == I hope you like TypeErrors
但是,如果您输入列表[],它只会将a的元素加在一起,并生成我们知道并喜爱的扁平列表。
start的值默认为0和int,主要是因为最常见的求和情况是算术。 

### 回答1: 好的,我可以帮您编写一个模拟内置函数sum()的函数。以下是代码示例: ```python def my_sum(numbers): result = 0 for num in numbers: result += num return result ``` 使用方法与内置的sum()函数相同: ```python my_list = [1, 2, 3, 4, 5] print(my_sum(my_list)) # 15 ``` 希望能够帮到您。 ### 回答2: 编写函数Summation(*args),用于模拟内置函数sum()的功能。该函数的参数可接受多个整数或浮点数,返回这些数的总和。 函数代码如下所示: ``` def Summation(*args): total = 0 for num in args: total += num return total ``` 这个函数使用了可变参数*args,它可以接受任意数量的参数。在函数体内,我使用了一个循环来遍历args中的每一个数,并将它们依次加起来。 最后,返回总和total。 我们可以调用这个函数来计算一组数的和,例如: ``` print(Summation(1, 2, 3, 4, 5)) # 输出:15 print(Summation(10, 20, 30)) # 输出:60 print(Summation(0.5, 1.5, 2.5)) # 输出:4.5 ``` 这些调用中,我们分别传入了一组整数和浮点数作为参数,Summation函数计算并返回了它们的总和。 ### 回答3: 编写函数模拟内置函数sum(),可以用递归或循环的方法实现。下面是一个使用递归的例子: ```python def my_sum(arr): if len(arr) == 0: return 0 elif len(arr) == 1: return arr[0] else: return arr[0] + my_sum(arr[1:]) # 测试 nums = [1, 2, 3, 4, 5] result = my_sum(nums) print(result) # 输出15 ``` 这个函数将一个列表作为参数传入,通过递归的方式依次将列表中的元素相加,直到列表为空或只有一个元素时停止递归,返回结果。 另外,也可以使用循环的方式来实现: ```python def my_sum(arr): result = 0 for num in arr: result += num return result # 测试 nums = [1, 2, 3, 4, 5] result = my_sum(nums) print(result) # 输出15 ``` 这个函数通过循环遍历列表元素,并使用一个变量累加每个元素的值,最后返回求和的结果。 这样就可以模拟内置函数sum()的功能了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值