Простой способ сделать это с помощью понимания вложенного списка. Операция является выражением в самом внутреннем понимании списка и может быть легко изменена.
>>> vals = [1, 2, 3, 4]
>>> matrix = [[x - y for x in vals] for y in vals]
>>> matrix
[[ 0, 1, 2, 3],
[-1, 0, 1, 2],
[-2, -1, 0, 1],
[-3, -2, -1, 0]]
Здесь я использовал вычитание между элементами, чтобы соответствовать вашему примеру, но учтите, что этот синтаксис принимает любую произвольную операцию между объектами:
matrix = [[obj1.some_operation(obj2) for obj1 in vals] for obj2 in vals]
Если вам позже понадобится работать с matrix
в numpy, вы всегда можете преобразовать его в numpy.array()
.