@ Отличный ответ Джоэддона показывает одно из нескольких возможных решений. Основная проблема заключается в том, что ваши кортежи распаковываются при вызове функции final. Возможно, вы захотите распаковать их сразу же после их возвращения из базы данных, поскольку ваш код, вероятно, ожидает, что:
x_list = [x[0] for x in x_list]
Немного более быстрая версия, которая будет хорошей идеей, если у вас очень большие списки, будет
from operator import itemgetter
g = itemgetter(0)
x_list = [g(x) for x in x_list]
После распаковки кортежей решение на молнии возвращается к первоначальному предложению:
resultant = [Euclidean_norm(x, y, z) for x, y, z in zip(x_list, y_list, z_list]
или альтернативно:
resultant = [Euclidean_norm(*accel) for accel in zip(x_list, y_list, z_list]
Другой вариант - придерживаться map
, как вы пытались раньше. Проблема, с которой вы столкнулись, заключается в том, что синтаксис print(map(Euclidean_norm(a,b,c)))
неправильно использует map
. Выражение Euclidean_norm(a,b,c)
фактически тут же вызывает Euclidean_norm
со списками в качестве аргументов вместо передачи объекта функции в map
. Вы хотели бы сделать что-то вроде map(Euclidean_norm, a, b, c)
:
resultant = list(map(Euclidean_norm, x_list, y_list, z_list))
Вам нужно применить list
к map
, потому что map
возвращает генератор, который не будет оцениваться, пока вам не понадобятся элементы.