Как удалить все элементы, идущие после максимального элемента?
Необходимо осуществить поиск максимального элемента и затем удалить все элементы идущие после максимального в двумерном массиве 3x3.
Мой код максимальный элемент находит, но я не знаю как удалить элементы после него:
matrix = [
[3, 7, 5],
[9, 8, 1],
[6, 2, 4]
]
mx = matrix[0][0]
for row in matrix:
mx_ = max(row)
if mx_ > mx:
mx = mx_
Что должно получиться в итоге:
matrix = [
[3, 7, 5],
[9, 0, 0],
[0, 0, 0]
]
Ответы (2 шт):
Автор решения: Андрей Коробейников
→ Ссылка
В комментариях написали уже алгоритм, в коде примерно так можно реализовать, но думаю найдутся и одно двух строчные варианты)
def get_max(matrix):
max_in_matrix = 0
for row in matrix:
max_in_row = max(row)
if max_in_matrix < max_in_row:
max_in_matrix = max_in_row
return max_in_matrix
def reset_next(matrix, max_el):
next_null = False
for row in matrix:
for i in range(len(row)):
if next_null:
row[i] = 0
elif row[i] == max_el:
next_null = True
continue
return matrix
max_el = get_max(matrix)
matrix = reset_next(matrix=matrix, max_el=max_el)
Автор решения: Jack_oS
→ Ссылка
matrix = [
[3, 7, 5],
[9, 8, 1],
[6, 2, 4]
]
row_with_max = max(matrix, key=lambda x: max(x)) # строка с максимальным значением
i_max = matrix.index(row_with_max) # индекс строки
j_max = row_with_max.index(max(row_with_max)) # индекс столбца
flat_index = i_max*len(matrix)+j_max # индекс в плоском списке
и "забейте нулями" все, что идет после:
for i in range(len(matrix)):
for j in range(len(matrix[0])):
if flat_index < i*len(matrix)+j:
matrix[i][j] = 0
теперь в matrix:
>>> matrix
[
[3, 7, 5],
[9, 0, 0],
[0, 0, 0]
]