我有一个列表a = [(1,3),(3,7),(1,10),(3,5),......]
等等。即(entry_time,exit_time)。
其中,每个元组中的第一个元素是员工的入职时间,第二个元素是离职时间。需要找出时间,比如在一天中的哪个小时,办公室里的人最多。
例如输出:
{1'00: 10, 2'00: 20, 3'00: 15}
因此,最终输出应为2'00,计数为20。
发布于 2020-03-02 15:10:33
对last和range
使用列表理解,然后使用collections.Counter
和last extract maximum:
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
发布于 2020-03-02 15:32:42
我想建议一种更简单的方法(但效率可能较低)。您可以使用两个for循环。一个用于小时,第二个用于人员元组。
a = [(1, 3), (3, 7), (1, 10), (3, 5)]
# Initiate list for hours the represent the counter
rush_hour_status = [0] * 24
# Iterate over the day hours 12/24, doesn't matter.
for hour in range(24):
for person in a:
if person[0] <= hour and person[1] > hour: # Check if this person is working in this hour
rush_hour_status[hour] += 1
max_rush = max(rush_hour_status)
max_rush_index = (rush_hour_status.index(max_rush))
print(max_rush_index, max_rush)
发布于 2020-03-02 20:07:16
下面是复杂度为O(n)的代码,它打印高峰时段列表
假设:时间以24小时格式输入
a = [(10,15),(11,18),(10,11),(13,15)]
time_table = {}
for x in range(0,24):
time_table[x]=0
for i in a:
time_table[i[0]] = time_table[i[0]]+1
time_table[i[1]] = time_table[i[1]]-1
print(time_table[i[0]], time_table[i[1]])
for x in range(1,24):
time_table[x]=time_table[x-1]+time_table[x]
print(time_table)
max_value = max(time_table.values())
def getKeysByValue(dictOfElements, valueToFind):
listOfKeys = list()
listOfItems = dictOfElements.items()
for item in listOfItems:
if item[1] == valueToFind:
listOfKeys.append(item[0])
return listOfKeys
listOfKeys = getKeysByValue(time_table, max_value)
print(max_value, listOfKeys)
https://stackoverflow.com/questions/60484008
复制相似问题