人命最多数统计python_查找使用Python的人数最多的年份

给定一个具有出生和结束年份的人的清单(都在1900和之间2000),找出有生命的人最多的年份。

这是我有点蛮力的解决方案:

def most_populated(population, single=True):

years = dict()

for person in population:

for year in xrange(person[0], person[1]):

if year in years:

years[year] += 1

else:

years[year] = 0

return max(years, key=years.get) if single else \

[key for key, val in years.iteritems() if val == max(years.values())]

print most_populated([(1920, 1939), (1911, 1944),

(1920, 1955), (1938, 1939)])

print most_populated([(1920, 1939), (1911, 1944),

(1920, 1955), (1938, 1939), (1937, 1940)], False)

我正在尝试找到一种更有效的方法来解决此问题Python。两者-

readability和efficiency计数。而且,由于某种原因,我的代码无法正常显示[1938, 1939]。

更新资料

输入是list元组的a,其中元组的第一个元素是一个year人出生tuple的年份,而元组的第二个元素是死亡年份。

更新2

结束年份(元组的第二部分)以及该人还活着的年份(因此,如果该人去世Sept

1939(我们不在乎该月),那么他实际上在1939年还活着,至少是其中一部分) 。那应该可以解决1939’成绩缺失的问题。

最佳解决方案?

虽然可读性优先于@ joran-beasley,但对于更大的输入,最有效的算法由@

njzk2提供。感谢@hannes-ovrén在Gist的IPythonNotebook中提供分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值