I have documented myself regarding the ‘key=lambda’ functionality, and have found a good reference on its use:
http://www.daniweb.com/software-development/python/threads/376964
thanks to which I came to understand what the following code is ‘supposed’ to do:
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)
however I have a problem with the following syntax:
j = min(xrange(len(hulls[i])), key=lambda j: hulls[i][j])
My doubts, being a python apprentice albeit learning fast:
1- do I need to trace back the calls stack-like to understand what ‘type’ or more simply ‘value’ I get retrieving hulls[i][j]? (I read that python uses the ‘duck typing’, which would explain this need, if I’m not mistaken).
2- key=lambda j basically ‘retrieves’ the [i][j] element of hulls, doesn’t it? But does this mean that hulls[i][j] is an integer type, since the ‘for’ iteration calls ‘min’ with the for’s xrange?
3- optional: is there a c# equivalent or comparable to python’s min?
Thanks in advance.
Yes. In particular, hulls[i][j] could be any type or any value depending on what happened at runtime. e.g. all of hulls could be integers, but you can set
hulls[i][j]='foo'.Yes, the lambda there returns the jth element of the ith row in hulls. hulls[i][j] could be any comparable thing e.g.
min('a','b') is 'a'