为什么我的列表越来越短?

时间:2014-11-20 17:19:36

标签: python

我正在尝试做项目欧拉问题8.这是我正在做的事情背后的一般想法:

  • 我正在保存他们在文本文件中提供的数字;
  • 我正在将文件中的数字读入列表;
  • 我正在检查行中每13个数字块的产品;和
  • 现在我正在输出组成块的13个数字组(我这样做是因为我的输出出错了,所以我确保我的程序正确读取每个块。)

我的程序出现了几个问题,在我的故障排除过程中,我发现由于某种原因,我存储当前行的列表会缩短,直到它不存在为止。我不确定为什么会这样,我该怎么做才能解决这个问题?

这是我的源代码:

with open("product.txt") as f:
    array = []
    for line in f:
        line = line.split()
        if line:
            line = [int(i) for i in line]
            array.append(line)

def product(k): #Largest product of row k
    i = 0 #The start of the chunk of 13 terms
    row = str(array[k][0])
    while i < len(row) - 12: #Stop when i is 13 characters away from end of row
        j=0 #The start of our run-through of the chunk
        total = 1 #Set this value to 1 so that we can compare the next chunk of 13
        while j < 13: #Go outward to the 12th element only since we include 0
            total = total * int(row[i+j]) #The first character * the next 12
            j += 1
           #End of j while

        print (row[i:13]) #To verify that the program is reading size 13 blocks
        i += 1 #End of i while

    return total

print (product(0))

文本文件只是problem 8中数字的复制和粘贴。

2 个答案:

答案 0 :(得分:6)

您的列表不会在任何地方缩短,您只需打印越来越小的切片。

您正在为切片使用固定的终点:

print (row[i:13])

您希望相对于开头制作该终点:

print(row[i:i + 13])

答案 1 :(得分:0)

Euler问题非常适合学习许多计算机语言的基础知识,尤其是python。 Euler 8可以是单行代码,如下所示:

print max([reduce(lambda x,y: x*y,map(int,input_string[i:i+13])) for i in xrange(len(input_string)-13)])