3

我想运行从开始值到结束值的范围。它在低数字上工作正常,但是当它变得太大时会导致溢出错误,因为 int 太大而无法转换为 C Long。我正在使用 Python 2.7.3。

我在这里读到OverflowError Python int too large to convert to C long on using the itertools.count()method 除了该xrange方法通过步进而不是声明结束范围值与该方法的工作方式不同。

可以itertools.count()设置为像这样工作xrange()吗?

print "Range start value"
start_value = raw_input('> ')
start_value = int(start_value)

print "Range end value"
end_value = raw_input('> ')
end_value = int(end_value)

for i in xrange(start_value, end_value):
    print hex(i)
4

1 回答 1

4

itertools.islice()您可以使用count结束:

from itertools import count, islice

for i in islice(count(start_value), end_value - start_value):

islice()在值被迭代StopIteration后引发。end_value - start_value

支持 1 以外的步长并将其全部放在一个函数中将是:

from itertools import count, islice

def irange(start, stop=None, step=1):
    if stop is None:
        start, stop = 0, start
    length = 0
    if step > 0 and start < stop:
        length = 1 + (stop - 1 - start) // step
    elif step < 0 and start > stop:
        length = 1 + (start - 1 - stop) // -step
    return islice(count(start, step), length)

然后irange()像使用range()or一样使用xrange(),但现在可以使用 Pythonlong整数:

>>> import sys
>>> for i in irange(sys.maxint, sys.maxint + 10, 3):
...     print i
... 
9223372036854775807
9223372036854775810
9223372036854775813
9223372036854775816
于 2014-12-28T10:53:20.463 回答