Подсчет элементов в матрице - PullRequest
0 голосов
/ 16 июня 2020

У меня есть эта матрица:

matrix = [[a,r],[b,r],[c,r],[c,t,n],[b,t,n],[b,a]]

Я хочу посчитать, сколько раз «n» появилось в матрице, но есть условие. Если первая буква стоит рядом с «a» или «r», она не считается появившейся «n». Например, в этом списке «n» появилось один раз, потому что мы должны дисконтировать второй раз, когда оно появилось, из-за того, что буква «b» позже появилась рядом с «a».

I Я пробовал это:

c = 0
for i in range(len(matrix)):
    if n in matrix[i]:
         c+=1

Но я не смог выполнить все условия, которые я пробовал, если буква рядом с «n» снова появляется рядом с «a»

Ответы [ 2 ]

1 голос
/ 16 июня 2020

Вот способ сделать это с помощью наборов:

matrix = [["a","r"],["b","r"],["c","r"],["c","t","n"],["b","t","n"],["b","a"]]

# get the indices of the items containing 'n'
n_inx = [inx for inx in range(len(matrix)) if 'n' in matrix[inx]]

# get the indices of the items containing 'n'
a_inx = [inx for inx in range(len(matrix)) if 'a' in matrix[inx]]

# create a list of these items +1 position and -1 position. 
a_inx = [[a-1, a+1] for a in a_inx]
a_inx = [inx for s in a_inx for inx in s]

# drop the 'n's that have 'a' next to them. 
len(set(n_inx).difference(a_inx))

Результат: 1.

1 голос
/ 16 июня 2020

Вам нужно будет дважды выполнить l oop над матрицей (как предлагается в комментариях), чтобы сначала создать ignore_list, чтобы пропустить ненужные списки, а затем подсчитать количество 'n' s. Сделать это можно следующим образом -

matrix = [['a','r'],['b','r'],['c','r'],['c','t','n'],['b','t','n'],['b','a']]

c = 0
ignore_list = []
for i in range(len(matrix)):
    if matrix[i][1] == 'a':
         if matrix[i][0] not in ignore_list:
            ignore_list.append(matrix[i][0])

for i in range(len(matrix)):
    if matrix[i][0] not in ignore_list:
        if 'n' in matrix[i]:
            c+=1

print(c)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...