Подсчет последовательных чисел во всех столбцах 2D-массива

#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