从n开始并反向循环的python生成器?
我试图找到一个最高的公因数,并希望从上端开始,如何在python中创建一个从n开始并递减-1的生成器从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
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