【问题标题】:Iterating datetime function over a list在列表上迭代 datetime 函数
【发布时间】:2022-01-09 04:46:44
【问题描述】:

我在另一个应用程序中使用 Python 2.7。我有以下格式的时间戳列表。列表的长度因任务而异:

['23:05:26', '23:05:28', '23:05:30', '23:05:32']

使用 datetime 我想使用 timedelta 在此列表上运行一些基本数学运算

到目前为止,我已经成功地在两个单独的时间戳上运行了该操作,但是我找不到正确的语法和/或方法来在列表上迭代相同的函数。

我的基本功能是

def TS(x): 
    z1 = datetime.strptime(x, '%H:%M:%S')
    z2 = timedelta(hours=z1.hour,minutes=z1.minute,seconds=z1.second)

当字符串转换为timedeltas 时,我计划执行以下计算(但不确定它是否应该与设置timedelta 在同一个循环中):

x[-1] - x[-2], x[-2] - x[-3], ...

然后将每个计算的结果存储为字符串,使用str(ResultOfTimeCalc),也存储为秒,我想我应该使用ResultOfTimeCalc.seconds

如何格式化这一切,在循环中需要做什么,以及如何在循环中迭代函数?

【问题讨论】:

    标签: python python-2.7 datetime timedelta


    【解决方案1】:

    无需显式调用timedelta。您可以减去两个datetime 对象来获得差值作为timedelta

    >>> times = ['23:05:26', '23:05:28', '23:05:30', '23:05:32']
    >>> from datetime import datetime
    >>> tses = [datetime.strptime(x, '%H:%M:%S') for x in times]
    >>> [y - x for x, y in zip(tses, tses[1:])]
    [datetime.timedelta(seconds=2), datetime.timedelta(seconds=2), datetime.timedelta(seconds=2)]
    

    【讨论】:

    • 不错的答案,但我的行数更少!大声笑
    【解决方案2】:

    (最后)编辑:如何设置 numpy 以相反的顺序排列列表(最旧的在前)。

    已编辑:我将它与 TS(x) 函数相结合,以秒为单位输出时间增量。

    如果“x”是时间戳列表,则计算相邻时间点之间的差异,从最近的时间点到第一个时间点:

    time_deltas = [(datetime.datetime.strptime(x[index], '%H:%M:%S') - datetime.datetime.strptime(x[index - 1], '%H:%M:%S')).seconds for index in np.arange(1, len(x), 1)]
    

    【讨论】:

    • 谢谢! @Ori Yarden 这很棒,但我现在仍然不确定如何循环我上面包含的函数以将时间从字符串转换为 timedeltas。
    • 我编辑了我的评论,现在代码结合了 TS(x) 函数,以便您可以插入时间戳 ('%H:%M:%S') 并在其中包含 timedeltas 列表秒。如果@chepner 的代码是更好的解决方案,那么您应该接受他的回答,否则您可以接受我的。
    • 不要仅仅为了正在使用的表达式的副作用而使用列表推导式,尤其是当您实际定义一个列表时。
    • @OriYarden 你将如何设置 numpy 以使列表以相反的顺序排列(最旧的在前)?
    • @PCS 我编辑了我的答案,使其排在最前面;如果该解决方案有效,您可以接受我的回答。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2021-10-28
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多