我有一个嵌套列表:
[['2012 Mar 03 23:39:46', '2012 Mar 03 23:39:58'], ['2012 Mar 03 23:32:46', '2012 Mar 03 23:32:46'], ['2012 Mar 03 23:12:19', '2012 Mar 03 23:12:19'], ['2012 Mar 03 23:06:50', '2012 Mar 03 23:08:03'], ['2012 Mar 03 22:57:28', '2012 Mar 03 22:57:28'], ['2012 Mar 03 22:47:00', '2012 Mar 03 22:47:00'], ['2012 Mar 03 22:45:45', '2012 Mar 03 22:45:45'], ['2012 Mar 03 22:37:41', '2012 Mar 03 22:37:41'], ['2012 Mar 03 22:35:15', '2012 Mar 03 22:35:15'], ...]
我希望在这些时间范围相互重叠时找到最高数字(例如,当有3个时间段相互重叠时,我想得到" 3")。此列表按降序排列。
我写了这段代码:
counter=list()
for i in range(len(sorted_times)):
j=i
while j < len(sorted_times):
temp_counter=0
if sorted_times[i][0] <= sorted_times[j][1]:
temp_counter +=1
j +=1
else:
counter.append(temp_counter)
break
但是列表counter
仅填充0
。我之前使用pandas
和numpy
库解决了这个问题,我知道应该有两个重叠的时间范围。这次我想只使用内置的python库(时间或日期时间库除外)。
我不知道这段代码有什么问题。如果没有重叠的时间段,它至少应该返回一个满1
秒的列表。
我希望我能够清楚地解释我的问题。这是我在这里发布的第一篇文章,所以如果有什么遗漏,我会提前抱歉。
修改
当蒂姆·卡斯特利伦斯(Tim Castelijns)闷闷不乐时,这是我的时间戳(浮点数)列表,我也试过了:
[[1330814386.0, 1330814398.0], [1330813966.0, 1330813966.0], [1330812739.0, 1330812739.0], [1330812410.0, 1330812483.0], [1330811848.0, 1330811848.0], [1330811220.0, 1330811220.0], [1330811145.0, 1330811145.0], [1330810661.0, 1330810661.0], [1330810515.0, 1330810515.0], [1330810361.0, 1330810417.0], [1330809037.0, 1330809037.0], [1330808213.0, 1330808213.0], [1330807897.0, 1330807897.0],
我发现为什么我的代码没有正常工作 - 我应该写道:
temp_counter=0
while j < len(sorted_times):
而不是:
while j < len(sorted_times):
temp_counter=0
愚蠢的错误,我一天都看不到:(
不幸的是,我仍然没有得到与使用pandas
相同的答案。当我使用pandas
处理更大的数据样本(超过3000)时,我得到了数字9
作为答案,并使用内置库得到5
。使用time.strftime()
或未转换的时间戳(秒)和使用pandas.to_datetime(df.timestamp, unit='s')
之间有什么区别吗?我知道时区可能不同,但在这种情况下它不应该成为问题。