我想找到一個最高的公因子,並希望從上端開始,我如何在python中創建一個生成器,該生成器在n開始並且遞減爲-1?從n開始並反向循環的python生成器?
def drange(end):
i = 1
while i > end:
yield i
i += 1
我想找到一個最高的公因子,並希望從上端開始,我如何在python中創建一個生成器,該生成器在n開始並且遞減爲-1?從n開始並反向循環的python生成器?
def drange(end):
i = 1
while i > end:
yield i
i += 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
我能想到的是最簡單的答案用itertools.count
>>> from itertools import count
>>> p = count(10**10,-1)
>>> next(p) # Gives you the reverse decremented generator
你發電機很容易適應:
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
。
爲什麼你提出一個發生器,當類似的東西已經在itertools? – Abhijit
@Ahhijit:因爲OP在詢問如何自己編碼。 –
'xrange(n,0,-1)'? –
它從一個非常大的數字開始,所以使用xrange給我錯誤OverflowError:Python int太大而無法轉換爲C long –
這聽起來不像是一種計算GCD的有效方法。爲什麼不使用歐幾里德算法? – user2357112