range()
和xrange()
适用于10位数字。但13位数字怎么样?我在论坛上找不到任何东西。
答案 0 :(得分:12)
你可以试试这个。与范围相同的语义:
import operator
def lrange(num1, num2 = None, step = 1):
op = operator.__lt__
if num2 is None:
num1, num2 = 0, num1
if num2 < num1:
if step > 0:
num1 = num2
op = operator.__gt__
elif step < 0:
num1 = num2
while op(num1, num2):
yield num1
num1 += step
>>> list(lrange(138264128374162347812634134, 138264128374162347812634140))
[138264128374162347812634134L, 138264128374162347812634135L, 138264128374162347812634136L, 138264128374162347812634137L, 138264128374162347812634138L, 138264128374162347812634139L]
根据itertools.islice
的{{3}}
xrange
答案 1 :(得分:6)
创建范围没有问题,只要您不需要10 ** 13个元素,例如
range(10**14,10**15,10**14)
给出
[100000000000000, 200000000000000, 300000000000000, 400000000000000, 500000000000000, 600000000000000, 700000000000000, 800000000000000, 900000000000000]
答案 2 :(得分:6)
答案 3 :(得分:2)
在64位Python上:
>>> xrange(9999999999999)
xrange(9999999999999)
我不会将range()
用于13位数字。我糟糕的机器将无法保存结果列表。
答案 4 :(得分:2)
我认为它不会起作用。像len
这样的函数期望结果适合4字节整数,这是由于cPython实现中的限制。
在Python 3.0中:
>>> range(9999999999999)
range(0, 9999999999999)
它看起来很有效,但是......
>>> len(range(9999999999999))
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
len(range(9999999999999))
OverflowError: Python int too large to convert to C ssize_t
有关相关问题,请参阅here。
答案 5 :(得分:1)
range(x)返回一个list.Python列表不能包含那么多元素。如果需要进行数万亿次循环,你应该使用xrange()迭代这些数字。?
答案 6 :(得分:1)
range()和xrange()适用于最新版本的Python;但是,在2.5或更少时,你需要解决int到long转换。
def irange(start, stop=None, step=1):
if stop is None:
stop = long(start)
num = 1L
else:
stop = long(stop)
num = long(start)
step = long(step)
while num < stop:
yield num
num += step
这不是一个完整的解决方案(它不会处理否定步骤),但它应该让你前进。
答案 7 :(得分:0)
range()和xrange()之间的区别在于第一个返回整个列表,而第二个返回一个生成器,根据需要生成每个数字。第二个应该适用于任何数字,无论多大。
在Python 3.0中,xrange()已经消失,range()的行为与之前的xrange()相似。
答案 8 :(得分:0)
为了解决这个问题,你不需要这么长的数字,因为你只需要素因子,你可以使用平方根:
for i in xrange(2, int((n+1)**0.5)):