python sum函数iterable参数为二维list,start参数为“[]”该如何理解

python内置函数sum(iterable[, start]),当参数iterable为一个二维list,参数start为'[]',可以达成类似numpy.chararray.flatten的效果
如图
图片描述

请问这时候该如何理解sum函数的运行过程呢?谢谢

阅读 5.3k
2 个回答

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]

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++叫重载

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏