【问题标题】:List differences between numbers列出数字之间的差异
【发布时间】:2012-07-16 22:51:21
【问题描述】:

我两次输入从最小到最大的有序数据。

 start_time[s] = [10, 20, 30, 40, 50, 61, 79, 80]

 end_time[s] = [8, 9, 15, 31, 41, 60]

列表的大小与生成的日志文件时间戳数据不同

我想得到 end_time 和 start_time 最小值之间的正差的输出

我的代码如下:

  for item1 in end_time:   
    for item2 in start_time:  
      if (item1 > item2):
         new_item = item1 - item2
         new_list.append(new_item)

[5, 21, 11, 1, 31, 21, 11, 1, 50, 40, 30, 20, 10]

理想的输出将如下生成:

[5、11、11、20]

5...这是取 15 的 end_time - 10 的 start_time,为什么?它的第一个 end_time > start_time (8,9 也是 end_times 小于 10)

11...这是取下一个 end_time 31(我不想使用 15,因为我会重复计算),然后减去下一个 start_time 20 得到 11。

11...这是通过将以下 end_time 41 减去 start_time 30 得到 11。

20...这将是最后一个条目,它取 end_time 的 60 并使用 start_time 的 40 给出 20 的差值。

【问题讨论】:

  • 输入与输出的关系如何?
  • 输入是我已转换为秒的两个不同的 hh:mm:ss 时间戳。所以L1相当于开始时间,L2相当于结束时间。
  • ...但它们的长度甚至不一样...
  • 您的代码不正确(例如if (L1 < L2) ...)
  • 我进行了额外的编辑以试图澄清我的问题-我还进行了 L1、L2 更改

标签: python numpy python-2.7


【解决方案1】:

我假设两个列表都是按顺序排列的,这就是您的示例数据所显示的。

timeDeltas = []
idxStart = 0
idxEnd =  len(end_time)
for start in start_time:
    for i in range(idxStart, idxEnd)
        delta = 0
        end = end_time[i]
        if end > start:
            delta = end - start
            idxStart = i
        else:
            timeDeltas.append(delta)
            break

请注意,我没有进行完整性检查(例如,可以反复使用相同的结束时间)。

【讨论】:

  • 理想情况下,我希望每次计算只使用一个 end_time 值,并在 end_time 和 start_time 列表中循环
  • 已更新以反映您的建议;我还没有测试过,但我认为它应该可以工作
  • 我以全新的视角意识到我让自己的事情变得过于复杂。所以我重新检查了我是如何获取时间戳数据的,并找到了更好的搜索字符串,为我提供了理想的输出。我非常感谢您对嵌套循环的洞察力,我肯定会在其他程序中使用它。
【解决方案2】:

我就是这样做的

start_time = [10, 20, 30, 40, 50, 61, 79, 80]
end_time = [8, 9, 15, 31, 41, 60]
time_difference = [(min(start_time) - et) for et in end_time if min(start_time) > et]
[2,1]

您的问题可能有点模棱两可。我假设您严格要求正时差。

你想要什么输出?

【讨论】:

  • 我已经进行了额外的修改 - 尝试解决问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-14
  • 2013-07-12
  • 2013-04-03
  • 1970-01-01
  • 2013-03-03
  • 1970-01-01
  • 2020-02-09
相关资源
最近更新 更多