如何在python中处理非常大的数字(19位)

如何在python中处理非常大的数字(19位),python,largenumber,Python,Largenumber,在python中,我需要能够循环使用19位数字;这样做的典型方式是什么?我使用的是python 2.7.x;但如果有可行的解决方案,我们将使用Python3.x 我有很多1000**5(甚至更大的1000**10);我需要在for循环中遍历这个数字列表。我知道这需要多少时间;但是,因为我找不到一种方法来循环处理这么大的数字,所以我不知所措 我在Python2.7中尝试了xrange、range和itertools.islice,收到了溢出错误 感谢对于Python3.x,以下内容是正确的: py

在python中,我需要能够循环使用19位数字;这样做的典型方式是什么?我使用的是python 2.7.x;但如果有可行的解决方案,我们将使用Python3.x

我有很多<例如,code>1000**5(甚至更大的
1000**10
);我需要在for循环中遍历这个数字列表。我知道这需要多少时间;但是,因为我找不到一种方法来循环处理这么大的数字,所以我不知所措

我在Python2.7中尝试了
xrange
range
itertools.islice
,收到了
溢出
错误


感谢

对于Python3.x,以下内容是正确的:

python中的
int
类型没有限制。如果您想迭代0,1,2…n,其中n是一个19位数字,您可以执行以下操作:

for i in range(n):
    pass #whatever you like

尽管这需要很长的时间。

对于Python3.x来说,以下是正确的:

python中的
int
类型没有限制。如果您想迭代0,1,2…n,其中n是一个19位数字,您可以执行以下操作:

for i in range(n):
    pass #whatever you like

尽管这需要很长时间。

如果您尝试迭代单个数字:

long_int_string = '34234345456575657'
for digit in [int(x) for x in long_int_string]:
    # do something useful with digit        
    print digit

如果您试图迭代单个数字:

long_int_string = '34234345456575657'
for digit in [int(x) for x in long_int_string]:
    # do something useful with digit        
    print digit

听起来像是要遍历整数的各个数字。 对于这样的情况,知道
x%10
等于以十为底的正整数
x
的最右边的数字是很有用的。 记住这一点,您可以通过迭代使用模并减少数字来获得每个数字

def splitIntoDigits(x):
    digits = []
    while x != 0:
        digits.insert(0, int(x%10))
        x /= 10
    return digits

print splitIntoDigits(15016023042)
[1, 5, 0, 1, 6, 0, 2, 3, 0, 4, 2]
另外,请回答一句话:

>>> [int(num/(10**x)%10) for x in range(int(math.log(num,10)),-1,-1)]
[1, 5, 0, 1, 6, 0, 2, 3, 0, 4, 2]

听起来像是要遍历整数的各个数字。 对于这样的情况,知道
x%10
等于以十为底的正整数
x
的最右边的数字是很有用的。 记住这一点,您可以通过迭代使用模并减少数字来获得每个数字

def splitIntoDigits(x):
    digits = []
    while x != 0:
        digits.insert(0, int(x%10))
        x /= 10
    return digits

print splitIntoDigits(15016023042)
[1, 5, 0, 1, 6, 0, 2, 3, 0, 4, 2]
另外,请回答一句话:

>>> [int(num/(10**x)%10) for x in range(int(math.log(num,10)),-1,-1)]
[1, 5, 0, 1, 6, 0, 2, 3, 0, 4, 2]

虽然不如,但只要使用while()就可以解决问题(另外,它可以与任何版本的Python一起使用):

i=0

while(i不如for漂亮,但只要使用while()就可以解决这个问题(另外,它可以与任何版本的Python一起使用):

i=0

虽然(我什么意思?循环?需要更多描述。循环方式?作为字符串?用于什么目的?这是一个数字序列吗?数字是如何存储的?对于python来说,19位数字没有问题。你想做什么?@Lattyware在任何<3版本上都会耗尽内存。
range
创建完整的list进行迭代。
xrange
创建一个生成器表达式(在c中),因此,在开始迭代之前,它不会尝试填充长度为123456789001234567890的列表。在Python 3中,range是一个迭代器,可以安全使用。请注意,我发布的内容只在3.x中起作用,这是一个公平的观点-它更像是一个笑话,而不是一个实际的建议,但它确实在3.x上运行。你是什么意思?需要mor吗e描述。循环如何?作为字符串?用于什么目的?这是一个数字序列吗?数字是如何存储的?对于python来说,19位数字没有问题。你想做什么?@Lattyware会在任何<3版本上耗尽内存。
range
创建完整的列表以进行迭代。
xrange
改为创建生成器表达式(在c中),因此,在开始迭代之前,它不会尝试填充长度为123456789001234567890的列表。在Python 3中,range是一个迭代器,可以安全使用。请看,我发布的内容只在3.x中起作用,这是一个公平的观点-它更像是一个笑话,而不是实际的建议,但它确实在3上运行。x@J.F.Sebastian谢谢,注意。@user973917它对我有效,你确定你在3.x上吗?如果是,你会得到什么错误?@J.F.Sebastian谢谢,注意。@user973917它对我有效,你确定你在3.x上吗?如果是,你会得到什么错误?