在python中的Sum()

Qui*_*tic 4 python sum

我一直试图对python中的sum()感到满意,我确实理解了sum的基本功能,但作为mathematica背景,我只是好奇地知道我们可以像在mathematica中一样使用python中的sum例如,考虑这个mathematica模块:

Sq[a_, b_] := Module[{m, n}, m = Max[a, b]; n = Min[a, b];Sum[(m - r + 1) (n - r + 1), {r, 1, n}]]
Run Code Online (Sandbox Code Playgroud)

现在,是否可以像这样编写总和部分?我的意思是:

Sum[(m - r + 1) (n - r + 1), {r, 1, n}]
Run Code Online (Sandbox Code Playgroud)

试图在python中转换它,我想到这样的事情:

sum((m - r + 1) (n - r + 1) in xrange(1,n+1)) 
Run Code Online (Sandbox Code Playgroud)

但似乎没有工作!所以我的问题是如何让它工作?

Seb*_*olm 13

sum((m - r + 1) * (n - r + 1) for r in xrange(1,n+1))
Run Code Online (Sandbox Code Playgroud)
  1. 整数之间没有隐含的乘法,所以你需要*.
  2. f(x) for x in xes是列表推导的一般格式,您希望x迭代每个元素xes,并返回值f(x).

  • 两者之间的区别在于,在Python 2.x中,`range`返回一个实际的列表,如果列表很大,这可能会非常浪费内存.`xrange`是一个可迭代的,它按顺序生成数字,而不是实际返回一个真实的列表.(在Python 3中,`xrange`消失了,`range`变成了一个有效的内存迭代) (2认同)