2016-09-12 24 views
0

私はリストを持っています。リストを所定の時間ステップに分割する方法

私はデルタTにリストを分割したい など、リスト内の各項目は、時間0.1時間0.6を起こった出来事である
event = [0.1, 0.6, 1.5, 3.4, 3.8, 4.1, 6.2, 8.5, 9.1, 9.5] 

が、どのようにこれを行うことができますか?私が見た他のスレッドはすべてリストを等分に分割することについて議論しましたが、デルタt = 1の場合、0.1と0.6が一緒になっているリストと1.5などのリストが必要です。

+2

は、あなたが期待される出力を一覧表示することができます? – depperm

+0

これは常にソート順ですか? –

+0

期待される出力は、time_step_list = [[0.1,0.6]、[1.5]、[3.4、3.8]など]のようになり、間隔0-1,1-2,2-3のすべてのイベントをソートします。デルタtが1であると仮定した場合、3、3-4などとなる。 – joddm

答えて

0

リストを1回だけ繰り返し処理するバージョンを次に示します。

start = 0 
delta = 1 
stop = delta 
grouped = [] 
group = [] 
event = [0.1, 0.6, 1.5, 3.4, 3.8, 4.1, 6.2, 8.5, 9.1, 9.5] 
for val in event: 
    if start < val < stop: 
     group.append(val) 
    else: 
     while val > stop: 
      start += delta 
      stop += delta 
     grouped.append(group) 
     group = [val] 

print(grouped) # [[0.1, 0.6], [1.5], [3.4, 3.8], [4.1], [6.2], [8.5]] 
0

まず、リストがソートされていることを確認します。これを済ませたら、リストを繰り返してください。最初の値から始めて、最初の値から最終値までのすべての値を含む新しいリストを作成し、目的の範囲内に収めます。その後、その値のインデックスにジャンプし、繰り返します。 1のデルタTが与えられると、リスト

event = [0.1, 0.6, 1.5, 3.4, 3.8, 4.1, 6.2, 8.5, 9.1, 9.5] 

は、最初のステップでより小さなリストに[0.1、0.6]を連結し、1.5のうちの最初の値であるため、[1.5]で第2のステップを開始します範囲1。必要なすべての小さなリストが得られるまで、この手順を繰り返します。

0

リストのリストが上/下の整数で区切られているように見えます。そうであれば、デルタに各値を比較する条件付きループで "デルタ"を使用し、挿入している "現在/アクティブ"リストのインデックスを記録しておきます。現在の値がデルタよりも小さい場合はそれを挿入します。 かなり簡単にあなたがitertools.groupbyでこれを行うことができ

import math 
    list_of_lists=[[]] 
    active_index=0 
    for entry in event: 
     if entry<delta #use current delta and an outer loop if they are preset or increment delta by your step-size on each loop 
      list_of_lists[active_index].append(entry) 
     else: 
     list_of_lists.append([]) 
     active_index+=1 
     list_of_lists[active_index].append(entry) 
     #seems like you want to go to the next highest int here: 
     delta=math.ceil[entry] 
1

...初期リストがソートされると仮定:

from itertools import groupby 
event.sort() 
delta_t = 1 
r = [list(v) for (k, v) in groupby(event, lambda v: v // delta_t)] 
1

もう1つの可能な解決策:

from collections import defaultdict 


def split_list(lst, delta=1): 
    start, end = 0, max(event) 
    result = [] 

    while start < end: 
     start += delta 
     group = filter(lambda x: x > (start - delta) and x < start, event) 

     if group: 
      result.append(group) 

    return result 

event = [0.1, 0.6, 1.5, 3.4, 3.8, 4.1, 6.2, 8.5, 9.1, 9.5] 
print split_list(event) 
# [[0.1, 0.6], [1.5], [3.4, 3.8], [4.1], [6.2], [8.5], [9.1, 9.5]] 
関連する問題