python:非序列错误上的迭代
刚刚开始euler项目的164题,我想要一个函数,输出一个20位数字中每组3个连续数字之和的列表。这是我的功能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 我不断地得到关于非序列错误的迭代,我不知道为什么我应该这样做。任何帮助
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]))