-3

我正在尝试制作一个程序来计算列表编号中的数字,并在 sequence_len 数字中搜索 10 的总和。在它得到 10 的那一刻,它应该停止。1. 使用此代码我有一个错误。我应该怎么办?total=total+(list_n[i+n]) IndexError: 列表索引超出范围

2.如果我找到 then 的总和,我希望第一个 for 停止。是像我一样在最后写“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
4

2 回答 2

2

你有几个错误。首先是基本的:

b=true

这需要True,否则,python 将查找true变量。

其次,i实际上包含该迭代(循环)的变量值。例如:

>>> l = ['a', 'b', 'c']
>>> for i in l: print i
a
b
c

因此,您不能将其用作索引,因为索引必须是整数。因此,您需要做的是使用enumerate,这将生成tuple索引值的 a ,因此类似于:

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)]

因此,如果您想要列表中的 3 个数字中的 10,您可以combinations(list_of_n, 3)使用combinations(list_of_n, 2).

于 2013-10-26T17:33:41.477 回答
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

于 2013-10-26T17:19:39.363 回答