-1

So I'm looking at this python code to find the longest subsequence of two strings but I don't understand "#line A" why the third parameter is key=len. From what I learnt len is a function which returns the length of a string but I don't understand how it's being used here.

def lcs(xstr, ystr):
    """
    >>> lcs('thisisatest', 'testing123testing')
    'tsitest'
    """
    if not xstr or not ystr:
        return ""
    x, xs, y, ys = xstr[0], xstr[1:], ystr[0], ystr[1:]
    if x == y:
        return x + lcs(xs, ys)
    else:
        return max(lcs(xstr, ys), lcs(xs, ystr), key=len) #line A
Paker
  • 19
  • 5
  • It's a named parameter of the `max` function: https://docs.python.org/2/library/functions.html#max. Basically, the result of the 2 recursive calls to `lcs` are given to `len`, then compared. This basically returns the result with the longest length. – Carcigenicate Nov 13 '16 at 14:04
  • Please look up some documentation before posting a question in the future. – TigerhawkT3 Nov 13 '16 at 14:21

1 Answers1

0

The max function is by default computed on the natural values ordering.

But you can pass a function as alternate "key" to set your own criterion (same goes for sort).

Here the max of 2 passed values is done according to strings length, not strings alphanumerical ordering which would be the default: max returns the longest string of the two.

Jean-François Fabre
  • 137,073
  • 23
  • 153
  • 219