从n开始并反向循环的python生成器?

从n开始并反向循环的python生成器?,python,generator,Python,Generator,我试图找到一个最高的公因数,并希望从上端开始,如何在python中创建一个从n开始并递减-1的生成器 def drange(end): i = 1 while i > end: yield i i += 1 在Python3中,您可以使用 reversed(range(1000000000000000000000)) 这是因为range对象有一个_反转的_方法 Python 2的xrange无法处理那么大的数字,因此需要一个生成器函数: def d

我试图找到一个最高的公因数,并希望从上端开始,如何在python中创建一个从n开始并递减-1的生成器

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

在Python3中,您可以使用

reversed(range(1000000000000000000000))
这是因为range对象有一个_反转的_方法

Python 2的xrange无法处理那么大的数字,因此需要一个生成器函数:

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

for i in downrange(n):
    print i

我能想到的最简单的答案是使用


您的发电机易于调整:

def drange(end):
    i = end
    while i > 0:
        yield i
        i -= 1
这将从末尾倒计时到1:


如果要倒计时到0,请测试i>-1。

它从一个非常大的数字开始,因此使用xrange会给我一个错误Overflower错误:Python int太大,无法转换为C longth这听起来不是计算GCD的有效方法。为什么不使用欧几里德算法?@MartijnPieters,问题不在于错误,而是问如何创建一个从n开始倒数的生成器,我已经编写了一个递增的生成器,没有任何错误,我只是想知道是否有一种相反的方法。@user2357112,你是对的,这只是我的一个想法,我想知道这是否可能,这是出于我自己的好奇心,而不是出于任何原因。@PadraicCunningham:那篇文章给了你一个通用的发电机,可以倒计时。生成器只能前进,但前进意味着按降序生成数字。当itertools中已经有类似的东西时,你为什么要建议使用生成器?@Abhijit:因为OP询问如何自己编写代码。
def drange(end):
    i = end
    while i > 0:
        yield i
        i -= 1
>>> def drange(end):
...     i = end
...     while i > 0:
...         yield i
...         i -= 1
... 
>>> for n in drange(3):
...     print n
... 
3
2
1