Интерполяционная лямбда сложно понять

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)

Но все это отображение меня сбивает с толку.

Если вы посмотрите map() и lambda, вы можете попробовать и записать это в нескольких более длинных функциях def.

Chris_Rands 24.05.2018 13:19

он выполняет некоторые вычисления по 2 спискам координат.

Netwave 24.05.2018 13:20

@Chris_Rands Не могли бы вы сделать это?

Saphire 24.05.2018 13:23

это я или три карты / петли можно свести к одной? (тоже запутался)

bobrobbob 24.05.2018 13:47
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
4
406
2

Ответы 2

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 аргумента:

  1. lambda a, b: (a[0] + b[0], a[1] + b[1]) можно перевести как

def foo(a,b) : return (a[0] + b[0], a[1] + b[1])

Вы примените его к следующим двум спискам

  1. Первый список poly_1

  2. Второй список [(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)

Давайте переведем это:

  1. map применяет лямбда-функцию к каждому элементу poly_1 и poly_2
  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])

Не могли бы вы переформатировать, я думаю, форматирование немного не так.

Saphire 24.05.2018 14:08

Примечание:

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)

делает ту же работу. намного быстрее

Другие вопросы по теме