python内置函数sum(iterable[, start]),当参数iterable为一个二维list,参数start为'[]',可以达成类似numpy.chararray.flatten的效果
如图
请问这时候该如何理解sum函数的运行过程呢?谢谢
python内置函数sum(iterable[, start]),当参数iterable为一个二维list,参数start为'[]',可以达成类似numpy.chararray.flatten的效果
如图
请问这时候该如何理解sum函数的运行过程呢?谢谢
1楼讲的很对,我这边举例详细说明一下。
如下为help(sum)解释
Help on built-in function sum in module builtins:
sum(iterable, start=0, /)
Return the sum of a 'start' value (default: 0) plus an iterable of numbers
When the iterable is empty, return the start value.
This function is intended specifically for use with numeric values and may
reject non-numeric types.
(END)
主要这句话Return the sum of a 'start' value (default: 0) plus an iterable of numbers
,简单就是返回起始值start和迭代器每个元素累加的结果,而起始值默认为0。
举例说明:
a=[1,2,3]
sum(a) # 计算结果是sum(a) = 0 + 1 + 2 + 3, 起始start默认为0,是整数,加法没问题
sum(a, start=100) # sum(a, start=100) = 100 + 1 + 2 + 3, start变量也可以人为设置,此时为100,运算没问题
如果是二维list,如[[1,2,3],[4,5,6]], 这时迭代器每个元素均为list,这些元素作加法时start不能再使用默认整数类型值0了,因为整数和list无法做加法运算,即1+[1,2,3]+[4,5,6]运算是错误的,此时需要设置起始变量也为list类型,如start=[],如下:
a=[[1,2,3], [4, 5, 6]]
sum(a) # 这样写是错误的,sum(a) = 0 + [1,2,3] + [4, 5, 6] ,0无法和列表做加法运算
sum(a, start=[]) # 正确, sum(a, []) = [] + [1,2,3] + [4,5,6] = [1,2,3,4,5,6] ,这样才对
sum(a, start=[1,2,3]) # 正确, sum(a, [1,2,3]) = [1,2,3] + [1,2,3] + [4,5,6] = [1,2,3,1,2,3,4,5,6] ,也可以这样
结论:
使用sum做加法运算,start的值和迭代器中元素做加法运算,需要满足加法运算要求。
按照上面的示例,二维list使用sum可以实现多个list的拼接(其实使用numpy也很方便)。
如果遇到其他各种类型迭代器,只要按照定义展开就能轻松搞定内部机理,同时要记得设置start变量的值和迭代器元素类型相同哟!!!,不相同也可以,必须可以做加法运算,C++叫重载
3 回答3.1k 阅读✓ 已解决
2 回答1.9k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
2 回答1.8k 阅读✓ 已解决
4 回答1.8k 阅读
3 回答1.7k 阅读
1 回答1.4k 阅读✓ 已解决
sum(iterable[, start])
就是求一个可迭代对象(iterable
)的和,start 参数是可选的,start 就是求这个和之前的初值。比如,对于一个列表(可迭代对象)
li = [1, 2, 3, 4]
,sum(li)
就等于 10;如果指定一个初值,比如 5,那么sum(li, 5)
就等于5 + sum(li)
,就是 15。对于你的例子,列表
d = [[1, 2], [3, 4], [5, 6]]
,那么sum(d)
就是[1, 2] + [3, 4] + [5, 6]
,也就是[1, 2, 3, 4, 5, 6]
;sum(d, [])
显然就是[] + [1, 2] + [3, 4] + [5, 6]
,结果还是[1, 2, 3, 4, 5, 6]
;如果你修改第二个参数,变为sum(d, [9])
,那么结果就是[9, 1, 2, 3, 4, 5, 6]