2011-02-16 37 views

回答

1

如果timeseries是含有四個時間序列的列表,可以逆轉時間序列的每個,使用zip分組在一起4元組時間片,和enumerate記錄的索引。

# timeseries=[range(1,5),range(1,5),range(1,5),range(1,5)]  
for idx,data in enumerate(zip(*[ts[::-1] for ts in timeseries])): 
    if not all(data): 
     break 
else: 
    idx=None 
idx=len(timeseries[0])-idx-1 
# print(idx)  

當for循環中斷,idx將持有該指數的值爲零的時間序列值。如果沒有值爲零,則idx設置爲等於None

1
def rindex(l,v): 
    for i,el in enumerate(reversed(l)): 
     if el == v: 
      return len(l) - i - 1 
    return -1 
series = [[1,2], [0, 0, 1], ...] 
max(rindex(l, 0) for l in series) 
+0

我認爲會很慢,因爲`reversed`會爲每次調用`rindex`構建一個完整的反向版本列表。 – 2011-02-16 21:42:20

1

的功能的方法(沒有返回0,如果沒有發現任何地方):

timeseries = [ 
    [1, 2, 3, 5], 
    [4, 3, 0, 2], 
    [4, 2, 0, 1], 
    [4, 2, 6, 0], 
] 

etimeseries = list(enumerate(zip(*timeseries))) 
index = next((idx for (idx, xs) in reversed(etimeseries) if not all(xs)), None) 
# 3 
0
timeseries = [ [1, 2, 3, 5], [4, 3, 0, 2], [4, 2, 0, 1], [4, 2, 6, 0] ] 
print "timeseries==",timeseries 

res = [ (i for i in xrange(len(li)-1,-1,-1) if li[i]==0).next() if 0 in li else None 
     for li in timeseries ] 

print 
print 'res==',res 

結果

timeseries== [[1, 2, 3, 5], [4, 3, 0, 2], [4, 2, 0, 1], [4, 2, 6, 0]] 

res== [None, 2, 2, 3] 
相關問題