["python","python-2.x"]
Is it possible to have multiple statements in a python lambda expression?

I have a list of lists: lst = [[567, 345, 234], [253, 465, 756, 2345], [333, 777, 111, 555]] I want map lst into another list containing only the second smallest number from each sublist. So the result should be [345, 465, 333]. If I were just interested in the smallest number, I could write this as map(lambda x: min(x), lst). To get the second smallest numbers, I thought of sorting and then indexing the results, like map(lambda x: sort(x)[1], lst); however, sort returns None rather than chaining. If it were possible to use multiple statements in a lambda, I could write map(lambda x: sort(x); x[1], lst), but this is not allowed. Can I use map to solve the problem without defining a named function? How?
There are several different answers I can give here, from your specific question to more general concerns. So from most specific to most general: Q. Can you put multiple statements in a lambda? A. No. But you don't actually need to use a lambda. You can put the statements in a def instead. i.e.: def second_lowest(l): l.sort() return l[1] map(second_lowest, lst) Q. Can you get the second lowest item from a lambda by sorting the list? A. Yes. As alex's answer points out, sorted() is a version of sort that creates a new list, rather than sorting in-place, and can be chained. Note that this is probably what you should be using - it's bad practice for your map to have side effects on the original list. Q. How should I get the second lowest item from each list in a sequence of lists? A. sorted(l)[1] is not actually the best way for this. It has O(N log(N)) complexity, while an O(n) solution exists. This can be found in the heapq module. >>> import heapq >>> l = [5,2,6,8,3,5] >>> heapq.nsmallest(l, 2) [2, 3] So just use: map(lambda x: heapq.nsmallest(x,2)[1], list_of_lists) It's also usually considered clearer to use a list comprehension, which avoids the lambda altogether: [heapq.nsmallest(x,2)[1] for x in list_of_lists]