超出范围指数

时间:2013-10-26 17:14:26

标签: python indexing range

我正在尝试制作一个程序来计算列表编号中的数字,并在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

2 个答案:

答案 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结尾的数字