【问题标题】:How to calculate shortest and longest time interval of list in python如何在python中计算列表的最短和最长时间间隔
【发布时间】:2017-09-26 21:39:59
【问题描述】:

我有一个以分钟为单位的时间间隔列表,如下所示:

lst = [9.7, 16.1, 16.5, 2.3, 0.2, 7.0, 4.8, 24.9, 17.6, 13.8, 12.3,
16.2, 2.4, 8.7, 2.7, 35.5, 0.9, 25.6, 1.2, 17.4, 6.2, 7.8, 27.7, 0.3,
0.9, 37.0, 10.7, 1.4, 65.3, 44.0, 1.8, 8.3, 2.2, 5.6, 14.6, 2.7, 17.9,
0.8, 2.8, 25.4, 7.7, 8.1, 13.6, 9.7, 7.3, 0.5, 19.4, 51.4, 56.1, 16.3]

我正在尝试计算列表 lst 中间隔之间的最长和最短等待时间。我尝试了以下方法:

size = len(lst)
interval_diff = [lst[i + 1] - lst[i] for i in range(size) if i+1 < size]
print("shortest waiting time:",(min(interval_diff)))
print("longest waiting time:",(max(interval_diff)))

这给了我结果:

shortest waiting time: -42.2
longest waiting time: 63.9

问题是我能够正确计算最长的等待时间,但最短的等待时间给我 -42.2 并且时间不能为负数。如果我尝试使用绝对值,它只会给我正值 42.2,如果我们将列表中的每个时间间隔与下一个时间间隔进行比较,那并不是最短的等待时间。我也无法对列表进行排序,因为它需要按照间隔现在的顺序排列。有谁知道我怎样才能获得列表中最短的等待时间?在这种情况下,我想它应该是 2.3-0.2,即 2.1?任何帮助将不胜感激。

【问题讨论】:

  • 但是0.22.3 之后,你计算的是0.2 - 2.3 而不是2.3 - 0.2。而16.5 - 16.1,即0.4 小于2.1
  • @MrGeek 你是对的,对不起,我以 2.3 - 0.2 为例。最短的等待时间是 16.5 - 16.1,即 0.4。

标签: python python-3.x list


【解决方案1】:

不要先做minabs,取每次之间的绝对差:

interval_dff = [abs(x - y) for x, y in zip(lst[1:], lst)]

那么你就可以使用min/max

【讨论】:

  • 感谢@HyperNeutrino 这行得通,我曾尝试使用 zip 函数但不是绝对值,并且在执行此操作时已对列表进行了排序。这真的很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多