@Timebird

Почему не выполняется замена значений цикла?

Вопрос крайне тупой.
Имеется матрица mat, необходимо заменить числа больше mean на 1 и меньше mean на 0.
Пишу:
def translate_mat(mat, mean):
	for row in mat:
		for elem in row:
			if elem < mean:
				elem == 0
			else:
				elem == 1
	return mat


Вызываю:
translate_mat(mat, mean), на выходе получаю исходный массив без каких-либо замен. Тут можно не городить list comprehensions, а как-то исправить мой цикл так, чтобы он заработал?
  • Вопрос задан
  • 125 просмотров
Решения вопроса 2
Кроме замены == на = есть ещё кое что:

for elem in row:
row - это, наверное, список чисел?
Тогда переменная (или ссылка) elem ссылается не на конкретную позицию в списке, а просто на объект-число.
То есть это "ЭЛЕМ это число Х", но не "ЭЛЕМ это энное число из списка".

Когда вы напишете elem = 1 вы не замените число в списке. Вы просто скажете, что ссылка elem теперь ссылается на объект-число 1.

Вам вместо "ЭЛЕМ теперь будет числом Y" нужно "Энное число из списка теперь равно Y".
Чтобы заменить элемент в списке надо писать row[index] = 1

Перепишем код:
def translate_mat(mat, mean):
  for row in mat:
    for i in range(len(row)):  
      if row[i] < mean:
        row[i] = 0
      else:
        row[i] = 1
  return mat


Ещё вариант:

def translate_mat(mat, mean):
  for row in mat:
    for i, elem in enumerate(row):  
        row[i] = 0 if elem < mean else 1
  return mat
Ответ написан
Комментировать
TheProgrammer256
@TheProgrammer256
Программирование - хобби, обучаюсь постепенно.
def translate_mat(mat, mean):
    for row in range(len(mat)):
        for elem in range(len(mat[row])):
            if mat[row][elem] < mean:
                mat[row][elem] = 0
            else:
                mat[row][elem] = 1
    return mat

Как-то так это должно выглядеть
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@PolinaRuRu
== - это equal, то есть проверка на равно ли.
= - это присвоение.
вы хотите присвоить новое значение, используйте =
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы