Я работаю над некоторыми проблемами алгоритма, чтобы получить больше практики Python. У меня возникли проблемы с проблемой, которая требует изменения значений внутри матрицы Python (список списков).
# Challenge
# After they became famous, the CodeBots all decided to move to a new building and live together. The building is represented by a
# rectangular matrix of rooms. Each cell in the matrix contains an integer that represents the price of the room. Some rooms are
# free (their cost is 0), but that's probably because they are haunted, so all the bots are afraid of them. That is why any room
# that is free or is located anywhere below a free room in the same column is not considered suitable for the bots to live in.
# ex: matrix = [[0, 1, 1, 2], [[x, 1, 1, 2],
# [0, 5, 0, 0], --> [x, 5, x, x], --> 5 + 1 + 1 + 2 = 9
# [2, 0, 3, 3]] [x, x, x, x]]
Мой подход состоит из двух частей: 1) сначала найдите все нули в матрице и замените это значение на «x». 2) Как только это произойдет, просмотрите все списки и найдите индекс существующего «x», затем используйте это значение индекса и найдите его в других списках.. замените числовое значение на «x», если это число «ниже ' существующий 'x'.. надеюсь, это имеет смысл. У меня есть первая часть, и я пробовал вторую часть разными способами, но теперь сталкиваюсь с ошибкой.. Я чувствую, что я очень близок. Я также чувствую, что мой код довольно неэффективен (я новичок в Python), поэтому, если есть более эффективный способ сделать это, дайте мне знать.
Я понимаю, что означает ошибка, но мне трудно ее исправить, получая правильный ответ. Ошибка в том, что индекс выходит за пределы допустимого диапазона.
Мой код:
def matrixElementsSum(matrix):
numList = len(matrix) # essentially the number of 'rows' -> number of lists
numCol = len(matrix[0]) # number of values in each list
# replace 0's in each list with 'x'
for x in matrix:
if x.count(0) > 0:
for index, i in enumerate(x):
if i == 0:
x[index] = 'x'
for x in matrix:
for y in matrix[x]:
if(matrix[x][y] == 'x'):
x_ind = y
for z in matrix:
if(z < x):
matrix[z][x_ind] = 'x'
print(matrix)
Тестовый сценарий:
matrixElementsSum([[0, 1, 1, 2],
[0, 5, 0, 0],
[2, 0, 3, 3]])
if x.count(0) > 0:
? В любом случае, вы пытаетесь проиндексировать свою матрицу с помощью значений в матрице:for x in matrix: ... for y in matrix[x]
,x
будетlist
, строкой в вашей матрице - person juanpa.arrivillaga   schedule 11.01.2019