Нужно не путать просто генераторы и генераторы списков.
a = (sum(new_matrix[i]) for k in range(matrix_1_height))
Это - выражение-генератор. Оно принципиально "ленивое" - вычисляет свои значения только по запросу, и делает это только один раз. Т.е. ты можешь прогнать цикл
for i in a
, и значения будут сгенерированы и получены - но если попробуешь тут же прогнать цикл ещё раз на том же выражении, то не получишь ничего.
b = [sum(new_matrix[i]) for k in range(matrix_1_height)]
Это - генератор списка. Он вычисляет значения немедленно, все, и возвращает обычный список, который можно итерировать сколько угодно раз.
По сути, выражение можно записать и так:
a = (sum(new_matrix[i]) for k in range(matrix_1_height))
b = list(a) # прогоняем генератор и превращаем его в список