python:非序列错误上的迭代

python:非序列错误上的迭代,python,iteration,Python,Iteration,刚刚开始euler项目的164题,我想要一个函数,输出一个20位数字中每组3个连续数字之和的列表。这是我的功能 def func(n): sumlist = [] m = str(n) for i in range(0,18): sumlist.append(sum(int(m[i])+int(m[i+1])+int(m[i+2]))) return sumlist 我不断地得到关于非序列错误的迭代,我不知道为什么我应该这样做。任何帮助

刚刚开始euler项目的164题,我想要一个函数,输出一个20位数字中每组3个连续数字之和的列表。这是我的功能

    def func(n):
    sumlist = []
    m = str(n)
    for i in range(0,18):
         sumlist.append(sum(int(m[i])+int(m[i+1])+int(m[i+2])))
    return sumlist
我不断地得到关于非序列错误的迭代,我不知道为什么我应该这样做。任何帮助都将不胜感激,谢谢

编辑

完整回溯是:

Traceback (most recent call last): 
  File "peproblem164.py", line 8, in ? print func(11201201201201201201) 
  File "peproblem164.py", line 5, in func    
    sumlist.append(sum(int(m[i])+int(m[i+1])+int(m[i+2]))) 
TypeError: iteration over non-sequence'
那是因为

int(m[i]) + int(m[i+1]) + int(m[i+2])
这不是一个序列。这是一个
int
。我相信你的意思是:

sumlist.append(sum((int(m[i]), int(m[i+1]), int(m[i+2]))
这将起作用,因为

(int(m[i]), int(m[i+1]), int(m[i+2]))
这是一个序列

总之,使用整数列表比使用字符串更容易,因此首先将
m
转换为
int
s是有意义的:

m = map(int, str(n))
然后使用Python的切片语法获得子序列和:

for i in range(18): #Leaving out the start argument is equivalent to range(0, 18)
    sumlist.append(sum(m[i:i+3]))
而使用列表理解(更不用说更快)会更具python风格:


你真的不需要求和电话。替换

sumlist.append(sum(int(m[i])+int(m[i+1])+int(m[i+2])))


请发布完整的回溯…抱歉,完整的回溯是:'回溯(最近的一次调用):文件“peproblem164.py”,第8行,在?打印func(11201201)文件“peproblem164.py”,第5行,在func sumlist.append(sum(int(m[i])+int(m[i+1])+int(m[i+2]))类型错误:在非序列'@DomWigmore上迭代:欢迎使用StackOverflow。将来,在你的问题中包含所有相关信息将是非常有帮助的。此外,您应该在问题主体中包含任何要求的信息,而不是作为评论。这样,潜在的回答者可以一目了然地看到所有相关信息。不管怎么说,看看我的编辑,我又添加了一些指针。啊,是的,非常感谢,现在我看到这是一个相当愚蠢的错误。干杯
sumlist.append(sum(int(m[i])+int(m[i+1])+int(m[i+2])))
sumlist.append(int(m[i])+int(m[i+1])+int(m[i+2]))