2011-02-16 30 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] 
相关问题