A very simple problem here (I'm learning Python) - given a list of tuples which represent (year of birth, year of death) for a group of people, I want to find the minimum "year of birth" and the maximum "year of death". Here's how I did it:

    def testmax():
        years = [(1804, 1884), (1885,1997), (1902,1975), (1900,1989)] # sample data
    
        endyr = max([deathyr for (birthyr,deathyr) in years])
        startyr = min([birthyr for (birthyr,deathyr) in years])
        print(startyr, endyr) # correctly returns 1804 1997

As you can see, I use list comprehensions to go through the `years` list twice. Time complexity O(2N) = O(N).

I can improve this with a simple function that is longer but does it through one iteration of the `years` list — I simply track `(min, max)` as my return variables that I keep checking on every iteration to get the min and max years that I need, in one iteration. Time complexity = O(N). What I don't like here is writing longer code (perhaps in a test/interview where time is limited).

My question: is there a better/cleaner/more Pythonic way you would do this? Would a lambda function work here, if so how? Even if you still do it in 2 iterations, I'd appreciate it if you could demo/explain any variations of the code (perhaps using lambda) that you would have used.