ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

xrange与itertools.count Python 2.7

2019-10-28 21:57:59  阅读:265  来源: 互联网

标签:xrange python-2-7 itertools python


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

在这里,我阅读了OverflowError Python int too large to convert to C long关于使用itertools.count()方法的信息,除了该方法与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)

解决方法:

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

from itertools import count, islice

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

在end_value-迭代了start_value值之后,islice()引发StopIteration.

支持非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)

然后像使用range()或xrange()一样使用irange(),除了现在可以使用Python长整数:

>>> import sys
>>> for i in irange(sys.maxint, sys.maxint + 10, 3):
...     print i
... 
9223372036854775807
9223372036854775810
9223372036854775813
9223372036854775816

标签:xrange,python-2-7,itertools,python
来源: https://codeday.me/bug/20191028/1955359.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有