首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我想找出一天中有马克斯·拉什在办公室的时间。

我想找出一天中有马克斯·拉什在办公室的时间。
EN

Stack Overflow用户
提问于 2020-03-02 15:05:05
回答 3查看 73关注 0票数 1

我有一个列表a = [(1,3),(3,7),(1,10),(3,5),......]等等。即(entry_time,exit_time)。

其中,每个元组中的第一个元素是员工的入职时间,第二个元素是离职时间。需要找出时间,比如在一天中的哪个小时,办公室里的人最多。

例如输出:

代码语言:javascript
运行
复制
{1'00: 10, 2'00: 20, 3'00: 15}

因此,最终输出应为2'00,计数为20。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-03-02 15:10:33

对last和range使用列表理解,然后使用collections.Counter和last extract maximum:

代码语言:javascript
运行
复制
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

如果没有计算元组的最后一个值:

代码语言:javascript
运行
复制
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
票数 4
EN

Stack Overflow用户

发布于 2020-03-02 15:32:42

我想建议一种更简单的方法(但效率可能较低)。您可以使用两个for循环。一个用于小时,第二个用于人员元组。

代码语言:javascript
运行
复制
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)
票数 1
EN

Stack Overflow用户

发布于 2020-03-02 20:07:16

下面是复杂度为O(n)的代码,它打印高峰时段列表

假设:时间以24小时格式输入

代码语言:javascript
运行
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60484008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档