私は:
タイムスタンプのリストをdatetime
オブジェクトに変換します。
times = [datetime.datetime.strptime(t, '%Y-%m-%d %H:%M:%S') for t in times]
bisect
モジュールを使用して、ユーザーが要求した開始時刻を見つけます。ユーザー入力をオブジェクトに変換する場合、線形検索を使用bisect
するよりもはるかに高速な方法です。datetime
start = datetime.datetime(2002, 3, 31, 19, 53, 17)
startindex = bisect.bisect_left(times, start)
関数を使用itertools
して、2 つのリストを 1 つにマージし、範囲に一致するエントリを表示します。
end = datetime.datetime(2002, 4, 1, 07, 53, 17)
merged = itertools.izip(times, activity)
fromstart = itertools.islice(merged, startindex)
untilend = itertools.takewhile(lambda e: e[0] <= end, fromstart)
untilend
iterable は、コピーされたリストに余分なメモリを使用することなく、タプルとタプルの間でエントリを生成するようになりましstart
た。これにより、大量のデータを効率的に処理できます。end
(time, activity)
デモ:
>>> import itertools
>>> import datetime
>>> import bisect
>>> times = ['2002-03-31 19:30:41', '2002-03-31 19:30:41', '2002-03-31 19:43:49', '2002-03-31 19:43:50', '2002-03-31 19:50:05', '2002-03-31 19:50:06', '2002-03-31 19:50:06', '2002-03-31 19:50:44', '2002-03-31 19:50:45', '2002-03-31 19:50:45', '2002-03-31 19:51:50', '2002-03-31 19:51:50', '2002-03-31 19:51:50', '2002-03-31 19:52:25', '2002-03-31 19:52:25', '2002-03-31 19:52:25', '2002-03-31 19:53:05', '2002-03-31 19:53:06', '2002-03-31 19:53:06', '2002-03-31 19:53:06', '2002-03-31 19:53:17', '2002-03-31 19:54:14', '2002-03-31 19:54:14']
>>> activity= ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w']
>>> times = [datetime.datetime.strptime(t, '%Y-%m-%d %H:%M:%S') for t in times]
>>> start = datetime.datetime(2002, 3, 31, 19, 53, 17)
>>> end = datetime.datetime(2002, 4, 1, 07, 53, 17)
>>> startindex = bisect.bisect_left(times, start)
>>> merged = itertools.izip(times, activity)
>>> fromstart = itertools.islice(merged, startindex)
>>> untilend = itertools.takewhile(lambda e: e[0] <= end, fromstart)
>>> for time, activity in untilend:
... print time, activity
...
2002-03-31 19:30:41 a
2002-03-31 19:30:41 b
2002-03-31 19:43:49 c
2002-03-31 19:43:50 d
2002-03-31 19:50:05 e
2002-03-31 19:50:06 f
2002-03-31 19:50:06 g
2002-03-31 19:50:44 h
2002-03-31 19:50:45 i
2002-03-31 19:50:45 j
2002-03-31 19:51:50 k
2002-03-31 19:51:50 l
2002-03-31 19:51:50 m
2002-03-31 19:52:25 n
2002-03-31 19:52:25 o
2002-03-31 19:52:25 p
2002-03-31 19:53:05 q
2002-03-31 19:53:06 r
2002-03-31 19:53:06 s
2002-03-31 19:53:06 t