如何为大数字中的每个数字赋值?

时间:2016-04-02 16:42:08

标签: python arrays

当我遇到问题时,我在Project Euler上做了问题8。我无法找到一种方法来将千位数字中的每个数字分配给它自己的值。这是我的代码:

def Problem8():
    x = []
    num = [73167176531330624919225119674426574742355349194934969835203127745063262395783180169848018694788518438586156078911294949545950173795833195285320880551112540698747158523863050715693290963295227443043557668966489504452445231617318564030987111217223831136222989342338030813533627661428280644448664523874930358907296290491560440772390713810515859307960866701724271218839987979087922749219016997208880937765727333001053367881220235421809751254540594752243525849077116705560136048395864467063244157221553975369781797784617406495514929086256932197846862248283972241375657056057490261407972968652414535100474821663704844031998900088952434506585412275886668811642717147992444292823086346567481391912316282458178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450]
    def ans(i):
        one = num[i]
        two = num[i+1]
        three = num[i+2]
        four = num[i+3]
        return one*two*three*four
    for i in range(1,(len(num2)-3)):
        x.append(ans(i))
    print(x)

Problem8()

我只是检查它是否适用于四个相邻的数字,而不是像问题所说的十三个数字。但我的阵列一直空着。它为什么这样做?有没有更好的办法?

1 个答案:

答案 0 :(得分:1)

您编写代码的方式,执行[<bignumber>]会创建一个仅包含一个元素的列表,即有问题的大数字。在这种情况下,为num[i]执行i > 1不会产生任何结果。

如果要创建包含该数字所有数字的列表,请考虑执行以下操作:

num = map(int, str(<bignumber>)) # creates a list of digits 

这种方法的工作方式是strbignumber转换为字符串,而map首先将字符串iterable转换为其各个字符的列表,然后转换该列表中的每个字符回到一个整数,这样你现在有一个数字数组。

然后,您的其余分析可以毫无问题地发挥作用。

其他问题:

  • num2未定义。它在你的代码中似乎没有出现,应该抛出一个错误。我认为这是一个错字。
  • 您的i仅从range来电中的1开始,而不是0。请考虑更改此range(0, len(num) - 3),以免出现一个索引错误。更好的是:使用列表理解。
  • 在Python 2.7中,range在内存中创建了一个包含1000个元素的实际列表。对于更大的数字,这将是一大块内存。考虑改为xrange,或者 - 如果在Python 3上 - 什么都不做。
  • 最后,您可以将ans的整个输出压缩为一行。无需创建额外的变量,例如onetwo