查找使用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
的年份,而元组的第二个元素是死亡年份。
结束年份(元组的第二部分)以及该人还活着的年份(因此,如果该人去世Sept
1939(我们不在乎该月),那么他实际上在1939年还活着,至少是其中一部分) 。那应该可以解决1939’成绩缺失的问题。
虽然可读性优先于@ joran-beasley,但对于更大的输入,最有效的算法由@
njzk2提供。感谢@hannes-ovrén在Gist的IPythonNotebook中提供分析
回答:
from collections import Counter
>>> from itertools import chain
>>> def most_pop(pop):
… pop_flat = chain.from_iterable(range(i,j+1) for i,j in pop)
… return Counter(pop_flat).most_common()
…
>>> most_pop([(1920, 1939), (1911, 1944), (1920, 1955), (1938, 1939)])[0]
以上是 查找使用Python的人数最多的年份 的全部内容, 来源链接: utcz.com/qa/399737.html