为了账号安全,请及时绑定邮箱和手机立即绑定

以负数输出时间距离以创建序列

以负数输出时间距离以创建序列

qq_遁去的一_1 2021-08-17 16:03:54
一个项目需要一点帮助。我有两个列表,每个列表包含 4 个或更多特定周 - True_SH:[Timestamp('2012-01-08 00:00:00'), Timestamp('2012-04-22 00:00:00'), Timestamp('2012-08-19 00:00:00'), Timestamp('2012-10-07 00:00:00')真_SL:[Timestamp('2011-11-20 00:00:00'), Timestamp('2012-03-25 00:00:00'), Timestamp('2012-05-13 00:00:00'), Timestamp('2012-09-02 00:00:00')它们交替出现,并且不可能一个接一个地有两个 SL 或 SH,在本例中:SL->SH->SL->SH->SL->SH->SL->SH如何使用以下规则输出第三个列表中日期之间的周数距离 - 从 SL 到 SH 的距离产生正数,而从 SH 到 SL 的距离输出负数周数?该数字应包括计数中的开始周和结束周。在此示例中,前两个的距离:(1st)SL('2011-11-20 00:00:00') 到 (2nd) SH('2012-01-08 00:00:00') 输出正 7,- > 从 2nd(SH) 到 (3rd) SL('2012-03-25 00:00:00') 的距离输出 NEGATIVE -10 ,然后从 3rd(SL) 到 4th(SH) 再次输出一个正数,然后从SH 到 SL 负等。我需要这个列表来进一步分析是否有重复序列。真的希望任何人都可以帮助我,因为我正在努力寻找一种方法来做到这一点。
查看完整描述

1 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

我的方法是合并两个数组,对合并后的数组进行排序,然后遍历合并后的数组以计算相邻日期之间的周数。然后,您可以测试两个相邻日期中较大的一个,以查看它来自哪个原始列表,如果它来自 true_sl 列表,则返回一个负值。


请注意,我对合并列表进行排序的选择假定 true_sh 和 true_sl 列表中的日期将始终交错。


这是代码:


from datetime import datetime



true_sh = [datetime(2012, 1, 8), datetime(2012, 4, 22), datetime(2012, 8, 19), datetime(2012, 10, 7)]

true_sl = [datetime(2011, 11, 20), datetime(2012, 3, 25), datetime(2012, 5, 13), datetime(2012, 9, 2)]


out_array = true_sh

out_array.extend(true_sl)

out_array.sort()


for i, elem in enumerate(out_array):

    if i == 0:

        continue


    num_days = elem - out_array[i - 1]

    num_weeks = num_days.days // 7

    if elem in true_sl:

        num_weeks = -num_weeks


    print(num_weeks)

这是输出:


7

-11

4

-3

14

-2

5

另请注意,您将预期的第二个输出指定为 -10,但 2012 年 1 月 8 日和 2012 年 3 月 25 日之间有 77 天,因此我认为 -11 的输出是正确的。请你确认一下好吗?


查看完整回答
反对 回复 2021-08-17
  • 1 回答
  • 0 关注
  • 141 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信