Python

Нужна помощь в python

arr = [[0,1,1], [1,1,1], [1,1,1]]

def main(arr):

a = 0
b = 0
while a*b <= len(arr):
if arr[a][b] == 0:
arr[a][:] = 0
arr[:][b] = 0
else:
continue
a += 1
b += 1

print(arr)

main(arr)

Ошибка:
[[0, 1, 1], [1, 1, 1], [1, 1, 1]]
Traceback (most recent call last):
File "C:\Users\Admin\Desktop\task52.py", line 19, in
main(arr)
File "C:\Users\Admin\Desktop\task52.py", line 9, in main
if arr[a][b] == 0:
TypeError: 'int' object is not subscriptable

Задача: дана матрица N*M, состоящая из нулей и единиц. Необходимо преобразовать матрицу следующим образом: если элемент матрицы равен 0, то всю строку и весь столбец нужно «обнулить».

Входные данные: arr — матрица N*M, состоящая из нулей и единиц. N,M — натуральные числа от 1 до 10^6.

Вывод: матрица после преобразования.
arr[a][:] = 0 может заменить на что-то более простое, к примеру
for i in range( 3 ):
arr[a][i] = 0
Станислав Чертков
Станислав Чертков
34 701
Лучший ответ
Вот мой вариант:
"""
Задача: дана матрица N*M, состоящая из нулей и единиц.
Необходимо преобразовать матрицу следующим образом:
если элемент матрицы равен 0,
то всю строку и весь столбец нужно «обнулить».

Входные данные: arr — матрица N*M,
состоящая из нулей и единиц.
N,M — натуральные числа от 1 до 10^6.
"""
arr = [[0,1,1,1,1], [1,1,1,1,1], [1,1,1,0,1], [1,1,1,1,1]]
pos0 = []

print('До')
print(*arr, sep='\n')
for i, a in enumerate(arr):
~~~~for j, b in enumerate(a):
~~~~~~~~if b == 0:
~~~~~~~~~~~~pos0.append([i, j])

~~~~~~~~~~~~
for p in pos0:
~~~~arr[p[0]] = [0]*len(arr[0])
~~~~for i in range(len(arr)):
~~~~~~~~arr[i][p[1]] = 0
~~~~~~~~~~~~~~~~~~~~
print('После')
print(*arr, sep='\n')

Вывод
===============
До
[0, 1, 1, 1, 1]
[1, 1, 1, 1, 1]
[1, 1, 1, 0, 1]
[1, 1, 1, 1, 1]
После
[0, 0, 0, 0, 0]
[0, 1, 1, 0, 1]
[0, 0, 0, 0, 0]
[0, 1, 1, 0, 1]
>>>

PS
Уверен, что можно сделать как-нибудь поизящней, но по-моему такой вариант решения "в лоб", хорош тем, что мозги не надо наизнанку выворачивать, как в случае использования всех наворотов питона и запихивания всего кода в одну строку.

PS2
в
arr[p[0]] = [0]*len(arr[0])
len(arr[0]), потому, что предполагается, что все строки имеют одинаковую длину (по условию).
А если строки разной длины, то все равно нельзя просто
arr[p[0]] = [0]*len(arr[p[0]])
а надо еще проверять, чтобы за длину не вылезло.