2012-07-16 45 views
-1

我有秒输入有序数据从最小到最大的两次。数字之间的列表差异

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 ...这是通过31的下一个end_time(我不想用15,因为我会重复计数)然后subract 20的下一START_TIME,得到11.

11 ...这是通过取41以下END_TIME和减去30 START_TIME,得到11.

20 ...这将是最后一个条目,它需要end_time中的60,并使用start_time中的40来区别20.

+2

输入与输出有什么关系? – 2012-07-16 22:52:31

+0

输入是两个不同的hh:mm:ss时间戳,我已将其转换为秒。所以L1等于开始时间,L2等于结束时间。 – user1504774 2012-07-16 22:55:11

+0

......但它们的长度不一样...... – 2012-07-16 22:55:58

回答

0

我假定这两个列表都是按顺序排列的,这就是y我们的样本数据显示。

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 

请注意,我没有理智的检查(例如,可以反复使用相同的结束时间)。

+0

理想情况下,我想只用一个end_time值为每个计算和周期通过end_time和start_time列表 – user1504774 2012-07-17 14:49:39

+0

已更新,以反映什么你建议;我没有测试过,但我认为它应该可以工作 – ernie 2012-07-17 16:12:31

+0

我以一种全新的视角认识到我对自己的事情过于复杂。所以我重新检查了我是如何获得时间戳数据并找到了更好的搜索字符串,为我提供了理想的输出。我非常感谢你对我肯定会用于其他程序的嵌套循环的见解。 – user1504774 2012-07-17 20:41:02

0

这是我做的

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] 

你的问题也许有点含糊不清。我假设你严格要求积极的时间差异。

你想要的输出是什么?

+0

我做了额外的修改 - 尝试捕捉问题。 – user1504774 2012-07-17 14:29:14