Используйте понимание списка с помощью flatten и range
, затем используйте collections.Counter
и последний максимум извлечения:
a = [(1, 3), (3, 7), (1, 10), (3, 5)]
from collections import Counter
d = Counter([f'{y}:00' for s, e in a for y in range(s, e + 1)])
print(d)
Counter({'3:00': 4, '4:00': 3, '5:00': 3, '1:00': 2, '2:00': 2,
'6:00': 2, '7:00': 2, '8:00': 1, '9:00': 1, '10:00': 1})
maximum = max(d, key=d.get)
print(maximum, d[maximum])
3:00 4
Если последнее значение кортежа не считается:
d = Counter([f'{y}:00' for s, e in a for y in range(s, e)])
print (d)
Counter({'3:00': 3, '4:00': 3, '1:00': 2, '2:00': 2,
'5:00': 2, '6:00': 2, '7:00': 1, '8:00': 1, '9:00': 1})
maximum = max(d, key=d.get)
print(maximum, d[maximum])
3:00 3