将十位数整数添加到列表中将一些条目连接到“L”

时间:2013-07-13 17:54:46

标签: python string list integer append

我写了一个小脚本来查找 e (与旧Google广告相关)数字中的n位数字素数:

import math

# First 251 digits of e
e_digits = ("2"
            "7182818284 5904523536 0287471352 6624977572 4709369995"
            "9574966967 6277240766 3035354759 4571382178 5251664274"
            "2746639193 2003059921 8174135966 2904357290 0334295260"
            "5956307381 3232862794 3490763233 8298807531 9525101901"
            "1573834187 9307021540 8914993488 4167509244 7614606680")
e_digits = e_digits.replace(" ", "")

digits = int(raw_input("Number of digits: "))
print "Finding ", str(digits) + "-digit primes in the first", len(e_digits), "digits of e."

numbers = []
primes = []

# Creates list of numbers based on variable digits
for n in range(0,len(e_digits) - (digits - 1)):
    test_number = e_digits[n:n+digits]
    numbers.append(int(test_number))

# Checks each number for divisors smaller than its sqrt, then appends to list primes
for n in numbers:
    n_sqrt = int(math.floor(math.sqrt(n)))
    div = []
    for i in range(2,n_sqrt+1):
        if n % i == 0:
            div.append(i)
    if div == []:
        primes.append(n)

print primes

但是,当我设置数字= 10时,会打印出来:

[7427466391L, 7413596629L, 6059563073L, 3490763233L, 2988075319L, 1573834187, 7021540891L, 5408914993L]

除了数字6之外的所有列表条目都与“L”连接在一起,我不知道为什么。当我在IDLE和CMD中运行代码时会出现问题,尽管只有在使用此特定代码附加十位整数时才会出现。

在最后一个for循环的if语句中,如果我打印n,或者如果我在追加之前将n转换为字符串,则会打印正确的数字。但是,然后再次转换为整数会产生同样的问题。

数字= 11也会出现问题,但数字< 10。

我不能为我的生活找到错误(或者弄清楚是否有错误,真的)。对此的一些建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

您的代码运行正常,您看到的是正常的。这些是Python long integers的字面表示。

打印列表时,列表的内容将打印为表示形式,输出与repr() function相同。另一种方法是打印列表中的各个元素。

然而,您不必担心长期表示。这只是泄漏的Python整数的实现细节:

>>> 1234567890
1234567890
>>> type(1234567890)
<type 'int'>
>>> 12345678901234567890
12345678901234567890L
>>> type(12345678901234567890)
<type 'long'>

这里,Python解释器将表达式的结果打印为repr()表示 。大于sys.maxint的整数会自动变为long整数。

引用文档:

  

普通整数(也称为整数)是使用C中的long实现的,它给出了至少32位的精度(sys.maxint总是设置为当前平台的最大纯整数值,最小值为-sys.maxint - 1)。长整数具有无限的精度。

  

未加修饰的整数文字(包括二进制,十六进制和八进制数)会产生普通整数,除非它们表示的值太大而无法表示为普通整数,在这种情况下它们会产生一个长整数。带有'L''l'后缀的整数文字会产生长整数('L'是首选,因为1l看起来太像11!)。

常规和长整数之间的比较和算术是完全支持和透明的:

  

Python完全支持混合算术:当二进制算术运算符具有不同数值类型的操作数时,具有“较窄”类型的操作数被扩展为另一个的操作数,其中普通整数比长整数窄,比浮点更窄比复杂更窄。混合类型数字之间的比较使用相同的规则。

Python 3完全消除了这一区别。