друзья-кодеры! Помогите, пожалуйста, с условиями в списках в коде Python. Где ошибка в этом синтаксисе?
matrix = [
[matrix[i][j] = '.' if matrix[i][j] % 2 == 0 else matrix[i][j] = '*' for i in range(int(col))]
for j in range(int(row))
]
Не знаю, как решить эту проблему.
Присвоения в вашем условном выражении явно неверны.
Вместо этого вы можете использовать оператор морж (:=
). Чтобы определить, будет ли это полезно, потребуется более подробная информация о том, что вы на самом деле пытаетесь сделать. Имейте в виду, что списки списков обычно используются только для создания новых списков, а не для изменения существующих списков. Их использование для замены цикла кажется мне явно «не-Pythonic».
Хотя вы не предоставили описание желаемого результата, вполне вероятно, что вы стремились к следующему:
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
col = 3
row = 3
matrix = [
['.' if matrix[i][j] % 2 == 0 else '*' for i in range(int(col))]
for j in range(int(row))
]
print(matrix)
Выход:
[['*', '.', '*'], ['.', '*', '.'], ['*', '.', '*']]
Он генерирует новый matrix
с '.'
вместо каждого четного значения и '*'
вместо каждого нечетного значения и присваивает результат matrix
, перезаписывая исходные данные.
Несколько замечаний по коду, которым вы поделились:
matrix
, но также имели операторы присваивания (т. е. [matrix[i][j] =
) в понимании списка , что не работает.int(col)
и int(row)
, предполагающие, что это не были int
ценности с самого начала; в моем примере они есть, но поскольку вы не предоставили код, определяющий их, требуются некоторые догадки, и я оставил их. Я предположил, что они представляют размер вложенного списка matrix
.Как указывает пользователь @Chris в комментариях, более кратким решением вашей проблемы было бы:
matrix = [['.' if x % 2 == 0 else '*' for x in row] for row in matrix]
Это вообще позволяет избежать использования индексов, а также будет работать для вложенных списков, которые не образуют прямоугольную матрицу.
Было бы лучше вообще без явной индексации. [['.' if x % 2 == 0 else '*' for x in row] for row in matrix]
Да, но я решил просто удалить лишний код из OP, вместо того, чтобы переписывать его в лучшее решение в целом.
Я очень прошу прощения перед вами за мой код. Но я очень благодарен за ваш ответ.
Пожалуйста — также проголосуйте за комментарий @Chris, если вы ищете более короткий ответ.
Я считаю, что проблема в
matrix[i][j] = '.'
. Вы не можете использовать простое присваивание в качестве внутренней части понимания списка.