умножить каждый элемент в 2D-списке на скаляр в Python - PullRequest
0 голосов
/ 23 января 2019

m - это 2D матрица, что-то вроде:

[[1,2,3],[3,4,5],[6,7,1]]

print([i*5 for i in [j for j in m]]) не работает.Повторяет элементы в каждой строке по 5 элементов.Я бы хотел, чтобы каждый элемент умножался на скаляр 5.

Не хочу использовать numpy.Как мне решить эту проблему, используя списки?Спасибо!

Ответы [ 3 ]

0 голосов
/ 23 января 2019
a = [[1,2,3],[3,4,5],[6,7,1]]
print([[j*5 for j in i] for i in a])

выход:

[[5, 10, 15], [15, 20, 25], [30, 35, 5]]
0 голосов
/ 23 января 2019

Я вижу, что вам требуется понимание списка, но только чтобы показать опцию с numpy:

import numpy as np

v = [[1,2,3],[3,4,5],[6,7,1]]
vv = np.array(v)

print(vv*5)
# [[ 5 10 15]
#  [15 20 25]
#  [30 35  5]]
0 голосов
/ 23 января 2019

Списки Python всегда одномерные.Ваша «матрица» - это просто список из трех списков, а не список 2D.Таким образом, ваше внешнее понимание списка должно генерировать списки как его элементы.

[[i*5 for i in row] for row in m]

Это помогает думать о списках как о циклах с аккумуляторами, т.е.

output = []
for row in m:
    output.append([i*5 for i in row])
...