2013-07-15 36 views
0

我沒有寫代碼,這樣做:從列表中蟒查找過零點

for i in xrange(len(Derivative)): 
    if ((Derivative[i-1] > Derivative[i]) and (Derivative[i+1] < Derivative[i]) and (Derivative[i-1] > 0.0) and (Derivative[i+1] < 0.0) and (Derivative[i] > 0.0)): 
     print str(i+1) 

這裏Derivative是名單中,我必須檢測過零點主要是那些在價值之前過零點正向和零交叉後爲負值。

我附上了Derivative的圖表來進一步闡明問題!

我想知道在Python中是否有更好的方法來做這件事,我的意思是代碼更簡短和精確?

回答

1

你只需要電流導數與一個其後的比較。因此,您可以刪除對Derivative [i-1]的任何引用。如果導數[i]大於零,並且導數[i + 1]小於零,則必然導數[i + 1] <導數[i]。所以你也可以刪除這個條件。這離開了:

for i in xrange(len(Derivative)-1): 
    if Derivative[i] > 0 and Derivative[i+1] < 0: 
     print "crossing between indexes {} and {}".format(i, i+1) 

此外,我把論點縮短爲xrange一個。否則,你會得到list index out of range

+0

我有四個列表來嘗試該代碼。其中兩個我沒有得到'列表索引超出範圍'的錯誤! –