2011-05-15 86 views
4

我一直想在sumthon()在Python中,我明白了总和的基本功能,但作为一个数学背景,我只是好奇知道我们可以使用总和在Python中以同样的方式像我们比如在做数学考虑这个数学模块:在python sum()python

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

现在,难道是可以写的总和部分这样呢?我的意思是:

Sum[(m - r + 1) (n - r + 1), {r, 1, n}] 

试图在python隐蔽这一点,我觉得是这样的:

sum((m - r + 1) (n - r + 1) in xrange(1,n+1)) 

,但似乎并不奏效!所以我的问题如何得到它的工作?

回答

13
sum((m - r + 1) * (n - r + 1) for r in xrange(1,n+1)) 
  1. 有整数之间没有隐含的乘法,所以你需要*
  2. f(x) for x in xes是列表理解的一般格式,您希望x遍历xes的每个元素,并返回值f(x)
+0

我只是碰巧弄清楚,在(1,n + 1)范围内r的和((m-r + 1)*(n-r + 1))也适用。 – Quixotic 2011-05-15 10:40:35

+2

两者之间的区别在于,在Python 2.x中,'range'返回一个实际列表,如果列表很大,这可能会造成很大的内存浪费。 'xrange'是一个迭代器,它按顺序生成数字,而不是实际返回一个真正的列表。 (在Python 3中,'xrange'消失,'range'成为一种高效的可迭代内存) – ncoghlan 2011-05-15 13:42:41