#python #arrays
#python #массивы
Вопрос:
У меня есть 2d-массив, X
который выглядит следующим образом
[0, 0, 0, 2, 1]
[1, 2, 1, 0, 1]
[2, 2, 1, 0, 0]
[0, 0, 1, 2, 0]
Я пытаюсь выполнить итерацию по всему 2D-массиву, чтобы попытаться подсчитать все экземпляры, где в столбце есть 2 последовательных элемента. Например, X
выше будет возвращено 4 ( X[1][1] == X[2][1] amp;amp; X[1][2] == X[2][2] amp;amp; X[2][2] == X[3][2]
и так далее)
Я нахожу это очень трудным для визуализации. Пока у меня есть:
def get_opposite(number):
if number == 2: return 1
if number == 1: return 2
def counter(X, number):
count = 0
for i in range(len(X)):
for j in range(len(X[i])-1):
if X[i][j] == X[i][j 1] and X[i][j] != 0 and X[i][j] != get_opposite(number):
count = 1
return count
Я продолжаю либо получать совершенно неправильные результаты, либо IndexError, это должно быть довольно просто, но я не уверен, что я делаю неправильно
Комментарии:
1. Зачем вашей функции счетчика нужен второй аргумент? Это кажется неуместным при чтении вопроса, который вы задаете…
Ответ №1:
Если вы сравните приведенный вами в тексте пример с вашим реальным кодом, вы заметите, что ваш код сравнивается со значением справа, а не со значением под ним. Вам нужно применить 1
к первому индексу, а не ко второму. Это также означает, что диапазон ваших циклов должен быть соответствующим образом адаптирован.
Во-вторых, вам не нужна первая функция. Сравнения на равенство достаточно.
Кроме того, я удалил второй аргумент функции, поскольку он не играет никакой роли:
def counter(X):
count = 0
for i in range(len(X)-1):
for j in range(len(X[i])):
if X[i][j] == X[i 1][j] and X[i][j] != 0:
count = 1
return count