2011-05-15 79 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