-3

リスト番号の数字を数え、sequence_len 番号で合計 10 を検索するプログラムを作成しようとしています。10 になった瞬間に停止するはずです。1.このコードでエラーが発生しました。私は何をすべきか?total=total+(list_n[i+n]) IndexError: リスト インデックスが範囲外です

2.私がその合計を見つけたら、最初に停止したい. 私がやったように最後に「ブレーク」するように書くのですか、それとも 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

このため、インデックスは整数でなければならないため、インデックスとして使用することはできません。したがって、必要なのは use です。これにより、インデックス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)]

したがって、リスト内の 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 に答える