ключ Python = лямбда-понимание и эквивалент C # - PullRequest
0 голосов
/ 05 ноября 2011

Я задокументировал себя относительно функциональности '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])

Мои сомнения в том, что я учусь на питоне, хотя учусь быстро:

1 - мне нужно отследить вызовы, похожие на стек, чтобы понять, какое «тип» или, проще, «значение», которое я получаю, извлекая hulls[i][j]? (Я читал, что python использует «типизацию утки», что объясняет эту необходимость, если я не ошибаюсь).

2- key=lambda j в основном "извлекает" [i][j] элемент корпуса, не так ли? Но значит ли это, что hulls[i][j] является целочисленным типом, так как итерация for вызывает min, а для xrange?

for

3 - необязательно: есть ли эквивалент C # или сравнимый с min?

в Python

Заранее спасибо.

1 Ответ

1 голос
/ 05 ноября 2011
  1. Да. В частности, оболочки [i] [j] могут быть любого типа или любого значения в зависимости от того, что произошло во время выполнения. например все корпуса могут быть целыми числами, но вы можете установить hulls[i][j]='foo'.

  2. Да, там лямбда возвращает j-й элемент i-го ряда в корпусах. корпуса [i] [j] могут быть любой сопоставимой вещью, например min('a','b') is 'a'

...