#python #lambda #key #min
#python #лямбда #Клавиша #минимум
Вопрос:
Я сам задокументировал функциональность ‘key = lambda’ и нашел хорошую ссылку на ее использование:
http://www.daniweb.com/software-development/python/threads/376964
благодаря чему я понял, что должен делать следующий код:
def _min_hull_pt_pair(hulls):
"""Returns the hull, point index pair that is minimal."""
h, p = 0, 0
for i in xrange(len(hulls)):
j = min(xrange(len(hulls[i])), key=lambda j: hulls[i][j])
if hulls[i][j] < hulls[h][p]:
h, p = i, j
return (h, p)
однако у меня проблема со следующим синтаксисом:
j = min(xrange(len(hulls[i])), key=lambda j: hulls[i][j])
Мои сомнения, будучи учеником python, хотя и быстро учусь:
1- нужно ли мне отслеживать стек вызовов, чтобы понять, какой «тип» или, проще говоря, «значение» я получаю при извлечении hulls[i][j]
? (Я читал, что python использует «утиный ввод», что объясняет эту необходимость, если я не ошибаюсь).
2- key=lambda j
в основном «извлекает» [i][j]
элемент оболочек, не так ли? Но означает ли это, что hulls[i][j]
это целочисленный тип, поскольку итерация ‘for’ вызывает ‘min’ с for xrange
?
3- необязательно: существует ли эквивалент c # или сопоставимый с python min
?
Заранее спасибо.
Ответ №1:
-
ДА. В частности, оболочки [i] [j] могут быть любого типа или любого значения в зависимости от того, что произошло во время выполнения. например, все оболочки могут быть целыми числами, но вы можете установить
hulls[i][j]='foo'
. -
Да, лямбда там возвращает j-й элемент i-й строки в оболочках. оболочки [i] [j] могут быть любой сопоставимой вещью, например
min('a','b') is 'a'
Комментарии:
1. спасибо за помощь. Итак, что касается второго пункта, пока я могу «минимизировать» любые два типа, это было бы справедливо для python? В принципе, тот факт, что я добавляю ‘xrange’ (который возвращает массив целых чисел, если я не ошибаюсь) с чем-то другим, не означает, что ‘something else’ является int !?! Хах! Я ненавижу нестрогость python 🙂
2. На самом деле, вы не создаете ‘xrange’ с помощью лямбды. небольшая деконструкция: часть xrange создает числа в диапазоне [0,len(оболочки [i])), ключ определяет конкретные значения, которые будут «обработаны». выражается в виде понимания списка, который вам может быть легче читать, а может и нет:
j = min([hulls[i][x] for x in xrange(len(hulls[i]))])
3. хахах, это безумие, я бы не понял этого без посторонней помощи. 😀