当前位置: 首页 > 面试题库 >

Python-产生时差

孟鸿朗
2023-03-14
问题内容

我正在尝试为使用情况统计信息生成报告。以下是我在数组中存储的示例数据,这是从Mysql表中获取的。如何实现一个逻辑,即如果用户闲置超过30分钟,没有使用过系统,否则计算使用时间的平均时间。

timestamp=[]
for i in timestamp:
   print i 

        2010-04-20 10:07:30
        2010-04-20 10:07:38
        2010-04-20 10:07:52
        2010-04-20 10:08:22
        2010-04-20 10:08:22
        2010-04-20 10:09:46
        2010-04-20 10:10:37
        2010-04-20 10:10:58
        2010-04-20 10:11:50
        2010-04-20 10:12:13
        2010-04-20 10:12:13
        2010-04-20 10:25:38
        2010-04-20 10:26:01
        2010-04-20 10:26:01
        2010-04-20 10:26:06
        2010-04-20 10:26:29
        2010-04-20 10:26:29
        2010-04-20 10:26:35
        2010-04-20 10:27:21
        2010-04-20 01:32:46
        2010-04-20 01:32:47
        2010-04-20 01:32:57
        2010-04-20 01:32:59
        2010-04-20 01:33:03
        2010-04-20 01:33:03
        2010-04-20 01:33:05
        2010-04-20 01:33:11
        2010-04-20 01:33:15
        2010-04-20 01:34:49
        2010-04-20 01:34:55
        2010-04-20 01:35:02
        2010-04-20 01:35:17
        2010-04-20 01:35:20
        2010-04-20 01:36:49
        2010-04-20 01:36:52
        2010-04-20 01:36:52
        2010-04-20 01:37:11
        2010-04-20 01:37:15
        2010-04-20 01:37:17
        2010-04-20 01:50:11
        2010-04-20 01:50:15
        2010-04-20 01:50:18
        2010-04-20 01:50:20
        2010-04-20 01:50:33
        2010-04-20 01:50:36
        2010-04-20 01:51:56

问题答案:

我想这就是你想要的。它遍历列表,计算每个条目与上一个条目之间的差异。如果差异大于或等于30分钟,它将忽略它。如果少于30分钟,则会将其添加到该用户的总使用量中。(我假设所有时间戳都是针对同一用户的。)

from datetime import datetime,timedelta

# Convert the timestamps to datetime objects
usetimes = sorted(datetime.strptime(d, '%Y-%m-%d %H:%M:%S') for d in timestamp)

# Set the idle time to compare with later
idletime = timedelta(minutes = 30)

# Start the running total with a timedelta of 0
usage = timedelta()
last = usetimes[0]

for d in usetimes[1:]:
    delta = d - last
    if delta < idletime:
        usage += delta
    last = d

print "total usage:",usage

如果您想使用sum()并且zip()可以减少代码行,但是我不确定它是否可读:

from datetime import datetime,timedelta
usetimes = sorted(datetime.strptime(d, '%Y-%m-%d %H:%M:%S') for d in timestamp)
idletime = timedelta(minutes = 30)
usage = sum((x - y for x,y in zip(usetimes[1:],usetimes[:-1]) if x - y < idletime),timedelta())
print "total usage:", usage

在这种情况下,如果时间戳列表很长,您可以考虑使用izipfromitertools代替zip



 类似资料:
  • 问题内容: 我有这个代码: 我的问题是我不明白为什么 Test 3 可以正常工作(它打印并且不产生),而 Test 4却 抛出了。正如你可以看到测试 1 和 2 ,和是平等的和。 Java 7和8中的行为相同。 问题答案: 您必须仔细查看正在调用的重载: 正在调用。即使提供了null参数,也不会抛出“ even”。 正在调用,因为的值类型为,需要进行拆箱转换。既然是,那就是该值的拆箱-而不是-引发

  • 本文向大家介绍在生产者中,何时发生QueueFullException?相关面试题,主要包含被问及在生产者中,何时发生QueueFullException?时的应答技巧和注意事项,需要的朋友参考一下 答:每当Kafka生产者试图以代理的身份在当时无法处理的速度发送消息时,通常都会发生QueueFullException。但是,为了协作处理增加的负载,用户需要添加足够的代理,因为生产者不会阻止。

  • 本文向大家介绍8085中产生时间延迟,包括了8085中产生时间延迟的使用技巧和注意事项,需要的朋友参考一下 在本节中,我们将看到如何使用8085程序生成时间延迟。该延迟将在不同的地方使用,以模拟时钟,计数器或其他区域。 当执行延迟子例程时,微处理器不执行其他任务。对于延迟,我们使用指令执行时间。在循环中执行一些指令,会产生延迟。有一些产生延迟的方法。这些方法如下。 使用NOP指令 使用8位寄存器作

  • 问题内容: 我知道Java 是什么。我有一些产生的Java代码。 Java在什么情况下会产生NaN值? 问题答案: 根据我对梯度下降的了解,您很可能会跳到无穷大,因为您没有自适应能力(即您的体积太大)。

  • 我使用一个自定义JsonConverter与System.Text.Json为了有DateTime与所需的时区 我在中这样注册它 就像您在代码中看到的那样,当收到没有时区的日期时,它将崩溃并出现异常,这将导致错误500 InternalServerError 我如何抛出异常以返回400而不触碰使用应用程序。UseExceptionHandler(因为代码在我的库中)? 请注意,引发的异常是Form

  • 问题内容: 这是故意的吗?我强烈记得以前的版本返回了吗?我该怎么办,有没有新的分公司运营商,或者我必须始终选拔? 问题答案: 更改除法运算符