2016-08-14 7 views
0

の整数私は、Pythonに新たなんだ、このように質問、はTypeError:スライスインデックスが、私は、配列をスライスし、より少ない最長の長さのサブ配列を見つけようとしているのPython 3

でなければなりません特定の値。これは

def main(): 
    a = [1, 2, 3] 
    print(maxLength(a, 3)) 


def maxLength(a, k): 
    max = 0 
    currTotal = 0 

    for i in enumerate(a): 
     for j in enumerate(a): 
      temp = a[i:i+j:1] 
      currTotal += a[j] 
      if currTotal < k: 
       if len(temp) > max: 
        max = len(temp) 

     currTotal = 0 
    return max 


if __name__ == '__main__': 
    main() 

私は次のエラーを取得しています、

TypeError: slice indices must be integers or None or have an __index__ method 

は私がスライス、感謝任意の助けを借りて、間違ってやっているかわからないんだけど、私のコードです。

+1

「i」と「j」は何と思いますか?印刷してみましたか? – TigerhawkT3

+0

スライスを使用している行は 'temp = a [i:i + j:1]'だけです。このスライスで使用される変数だけが 'i'と' j'です。あなたはそれが何を含んでいるかを確認しましたか(そしてそれはあなたが期待するものとどう違うのですか)。 –

答えて

5

enumerateを使用すると、一連のタプルが得られます。

for i,x in enumerate(mylist): 
    # i is the index 
    # x is the item at that index 

あなたは一つの変数にそのタプルを割り当てる:

for i in enumerate(a): 
    # i is a tuple of (index, item) 

そして、あなたはそれが整数であるようiを使用しようとしています。これは整数ではありません。

あなただけの整数、使用したい場合:

for i in range(len(a)): 
    for j in range(len(a)): 
     ... 
-1

objectを返しenumerateを。それはなぜあなたにそのエラーを与えているのですか?

アレイをトラバースする場合は、代わりにrange(len(a))を試してください。

for i in range(len(a)): 
     for j in range(len(a)): 
      temp = a[i:i+j:1] 
      currTotal += a[j] 
      if currTotal < k: 
       if len(temp) > max: 
        max = len(temp) 
+0

実際には、整数オブジェクトや 'None'オブジェクトをスライスに使用できます。スライスは関数ではありません。 – TigerhawkT3

関連する問題