我正在尝试制作一个程序来计算列表编号中的数字,并在sequence_len数字中搜索10的总和。 在它得到10分钟时,它应该停止。 1.使用此代码我有错误。我该怎么办? 总=总+(list_n [I + N]) IndexError:列表索引超出范围
2.如果我找到了当时的总和,我希望第一个停止。最后是否写入“break”,或者我应该写i = len(list_n)?
number = 1234
sequence_len = 2
list_n=[]
total=0
b="false"
list_t=[]
for j in str(number):
list_n.append(int(j))
c=len(list_n)
for i in list_n:
n=0
while n<sequence_len:
total=total+(list_n[i+n])
n=n+1
if total==10:
b=true
seq=0
while seq>sequence_len:
list_t.append(list_t[i+seq])
seq=seq+1
break
else:
total=0
if b=="true":
break
if b=="false":
print "Didn’t find any sequence of size", sequence_len
else:
print "Found a sequence of size", sequence_len ,":", list_t
答案 0 :(得分:2)
你有几个错误。首先是基本的:
b=true
这需要True
,否则,python会查找true
变量。
其次,i
实际上包含该迭代的变量值(循环)。例如:
>>> l = ['a', 'b', 'c']
>>> for i in l: print i
a
b
c
因此,您不能将其用作索引,因为索引必须是整数。因此,您需要做的是使用enumerate
,这将生成索引和值的tuple
,如下所示:
for i, var in enumerate(list_n):
n = 0
枚举实例的一个例子:
>>> var = enumerate([1,6,5,32,1])
>>> for x in var: print x
(0, 1)
(1, 6)
(2, 5)
(3, 32)
(4, 1)
我认为这句话应该有逻辑问题:
total = total + (list_n[i + n - 1])
如果你想从数字列表中得到10的总和,你可以使用这种强力技术:
>>> list_of_n = [1,0,5,4,2,1,2,3,4,5,6,8,2,7]
>>> from itertools import combinations
>>> [var for var in combinations(list_of_n, 2) if sum(var) == 10]
[(5, 5), (4, 6), (2, 8), (2, 8), (3, 7), (4, 6), (8, 2)]
因此,如果您希望列表中包含10个数字中的10个,则可以使用combinations(list_of_n, 3)
代替combinations(list_of_n, 2)
。
答案 1 :(得分:1)
当你说
时for i in list_n:
i
不会引用索引,而是引用列表元素本身。如果你只想要指数,
for i in range(len(list_n)):
len(list_n)
会为您提供列表的大小,range(len(list_n))
会为您提供一系列从0开始并以len(list_n) - 1
结尾的数字