2015-08-18 4 views
0

Я недавно начал изучать python. Следующий код вызывает ошибку типа type, указывающую, что я не могу использовать кортежи в качестве индекса в списке. Я совершенно уверен, что я использую целые числа, а не список для доступа к моему списку. Ошибка вызывается в строке, где я строю подматрицу. Можете ли вы мне помочь?Индексы индексов типаError должны быть целыми числами

Traceback (most recent call last): 
    File "matrix_input.py", line 44, in <module> 
    print(contains(matrix, target)) 
    File "matrix_input.py", line 33, in contains 
    sub_matrix = [row[index:len(target[0])] for row in matrix[i, len(target)]] 
TypeError: list indices must be integers, not tuple 

Это функция бросает ошибку:

def sub_array(row, sub_row): 
    i = 0 
    index = -1 
    for idx, val in enumerate(row): 
    if i >= len(sub_row): 
     break 
    elif val == sub_row[i]: 
     index = idx 
     i+=1 
    else: 
     i = 0 

    return index if i == len(sub_row) else -1 

def contains(matrix, target): 

    for i in range(len(matrix)): 
    index = sub_array(matrix[i], target[0]) 
    if index is not -1: 
     sub_matrix = [row[index:len(target[0])] for row in matrix[i, len(target)]] 
     print(sub_matrix) 
     if sub_matrix == target: 
     return "YES" 

    return "NO" 

ответ

1

matrix[i, len(target)] попытки доступа элемента в matrix с кортежем i, len(target) как индекс - не является целым числом. Кажется, вы намеревались использовать matrix[i][len(target)].

Вы также должны сравнить целые числа с ==/!= - index != -1 вместо index is not -1.

+0

Я заменяю кому: и это сработало. Спасибо. В чем разница между 'is not' и'! = '? –

+0

В качестве побочного примечания этот вид массива [y, x] обозначается вполне приемлемым для массивов numpy. Таким образом, будут примеры кода, где эти обозначения используются правильно. Просто дикая догадка, но это могло привести к путанице ОП. Что касается второго вопроса OP о «есть» и равенства ... это слишком сложно для короткого ответа. См. Http://stackoverflow.com/questions/132988/is-there-a-difference-between-and-is-in-python – BlivetWidget

+0

@GiuseppePes 'is' tests identity' == 'проверяет значение. Возможно, существует более одного объекта, представляющего «-1» (хотя и маловероятно), поэтому значение может быть «-1», но идентификатор будет другим объектом. –

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