Find the year with the most number of people alive in Python

后端 未结 9 2104
梦谈多话
梦谈多话 2020-12-14 20:48

Given a list of people with their birth and end years (all between 1900 and 2000), find the year with the most number of people alive.

Here

9条回答
  •  爱一瞬间的悲伤
    2020-12-14 21:29

    We can also use numpy slicing, which is quite neat, and should also be quite efficient:

    import numpy as np
    from collections import namedtuple
    
    Person = namedtuple('Person', ('birth', 'death'))
    people = [Person(1900,2000), Person(1950,1960), Person(1955, 1959)]
    
    START_YEAR = 1900
    END_YEAR = 2000
    people_alive = np.zeros(END_YEAR - START_YEAR + 1) # Alive each year
    
    for p in people:
        a = p.birth - START_YEAR
        b = p.death - START_YEAR + 1 # include year of death
        people_alive[a:b] += 1
    
    # Find indexes of maximum aliveness and convert to year
    most_alive = np.flatnonzero(people_alive == people_alive.max()) + START_YEAR
    

    EDIT It seems like the namedtuple adds a bit of overhead, so to speed up a bit more, remove the namedtuple and do for birth, death in people: instead.

提交回复
热议问题