2013-10-11 55 views
-5

我想找到一個最高的公因子,並希望從上端開始,我如何在python中創建一個生成器,該生成器在n開始並且遞減爲-1?從n開始並反向循環的python生成器?

def drange(end): 
    i = 1 
    while i > end: 
     yield i 
     i += 1 
+4

'xrange(n,0,-1)'? –

+0

它從一個非常大的數字開始,所以使用xrange給我錯誤OverflowError:Python int太大而無法轉換爲C long –

+1

這聽起來不像是一種計算GCD的有效方法。爲什麼不使用歐幾里德算法? – user2357112

回答

1

在Python 3,你可以使用

reversed(range(1000000000000000000000)) 

這工作,因爲範圍對象具有__reversed__方法。

的Python 2的x範圍不能處理的數字大,所以你需要一個發生器功能:

def downrange(n): 
    while n > 0: 
     yield n 
     n -= 1 

for i in downrange(n): 
    print i 
0

我能想到的是最簡單的答案用itertools.count

>>> from itertools import count 
>>> p = count(10**10,-1) 
>>> next(p) # Gives you the reverse decremented generator 
1

你發電機很容易適應:

def drange(end): 
    i = end 
    while i > 0: 
     yield i 
     i -= 1 

這倒數從end〜1:

>>> def drange(end): 
...  i = end 
...  while i > 0: 
...   yield i 
...   i -= 1 
... 
>>> for n in drange(3): 
...  print n 
... 
3 
2 
1 

如果要倒數至0,測試i > -1

+0

爲什麼你提出一個發生器,當類似的東西已經在itertools? – Abhijit

+0

@Ahhijit:因爲OP在詢問如何自己編碼。 –