poly1 и poly2 - оба списка, содержащие координаты (x, y).
Сейчас эта функция уже реализована, что мне трудно понять:
def interpolate():
# This function returns a list of tuples (x, y).
return map(lambda a, b: (a[0] + b[0], a[1] + b[1]), poly_1,
[(time * x[0], time * x[1]) for x in map(lambda p, q: (q[0] - p[0], q[1] - p[1]), poly_1, poly_2)])
Но можете ли вы объяснить, что происходит в interpolate?
Все, что я могу извлечь из этого, это (что касается лямбд)
def func_a(a, b):
return (a[0] + b[0], a[1] + b[1])
а также
def func_b(p, q):
return (q[0] - p[0], q[1] - p[1]), poly_1, poly_2)
Но все это отображение меня сбивает с толку.
он выполняет некоторые вычисления по 2 спискам координат.
@Chris_Rands Не могли бы вы сделать это?
это я или три карты / петли можно свести к одной? (тоже запутался)






map просто применяет функцию к каждому элементу в одном или нескольких массивах
Давайте взглянем:
return map(lambda a, b: (a[0] + b[0], a[1] + b[1]), poly_1,
[(time * x[0], time * x[1]) for x in map(lambda p, q: (q[0] - p[0], q[1] - p[1]), poly_1, poly_2)])
Это функция map, которая принимает 3 аргумента:
lambda a, b: (a[0] + b[0], a[1] + b[1]) можно перевести какdef foo(a,b) : return (a[0] + b[0], a[1] + b[1])
Вы примените его к следующим двум спискам
Первый список poly_1
Второй список [(time * x[0], time * x[1]) for x in map(lambda p, q: (q[0] - p[0], q[1] - p[1]), poly_1, poly_2)]:
Сначала это список кортежей с двумя аргументами time * x[0], time * x[1]
"x" берется из списка, возвращаемого из map(lambda p, q: (q[0] - p[0], q[1] - p[1]), poly_1, poly_2)
Давайте переведем это:
lambda p, q: (q[0] - p[0], q[1] - p[1]) равноdef foo2(p,q) : return (q[0] - p[0], q[1] - p[1])
Не могли бы вы переформатировать, я думаю, форматирование немного не так.
Примечание:
def interpolate(poly_1, poly_2):
return map(lambda p, q: (p[0] + t*(q[0]-p[0]), p[1] + t*(q[1]-p[1])), poly_1, poly_2)
делает ту же работу. намного быстрее
Если вы посмотрите
map()иlambda, вы можете попробовать и записать это в нескольких более длинных функцияхdef.