2016-08-14 4 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 

Я не уверен, что я делаю неправильно с Slice, любая помощь приветствуется.

+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

enumerate возвращает object. Вот почему он дает вам эту ошибку.

Если вы хотите пересечь массив, попробуйте 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

Фактически вы можете использовать целые объекты или объект «Нет» для нарезки. И срезы не являются функцией. – TigerhawkT3

Смежные вопросы