2016-11-09 76 views
-1

这是我的Python脚本:Python的,如果条件继续解析

mock_data = ((23020, "in0"), 
      (23000, "in1"), 
      (23020, "in2"), 
      (0, "in3"), 
      (23060, "in4"), 
      (23080, "in5"), 
      (23100, "in6"), 
      (0, "in7")) 
mock_len = len(mock_data) 
epsilon = 20 
max_data = 0 
isInInterval = True 
for i in range(mock_len - 1): 
    if isInInterval == True: 
     if mock_data[i+1][0]-mock_data[i][0] == 20: 
      max_data = mock_data[i+1][0] 
      isInInterval = False 
      print max_data 
    if max_data != 0 and mock_data[i][0]==0: 
     isInInterval = True 

输出:

23020 
23080 

但是,当我的数据更改为:

mock_data = ((23020, "in0"), 
      (23000, "in1"), 
      (23020, "in2"), 
      (0, "in3"), 
      (23060, "in4"), 
      (23080, "in5"), 
      (23100, "in6"), 
      (10, "in7"), 
      (100,"int8"), 
      (1000,"int9"), 
      (1020,"int10"), 
      (300,"int11")) 

输出与我目前的代码仍然与上面相同,但我也想打印1020:

23020 
23080 
1020 

什么是我的代码的最佳变化也包括在目前这种情况下,因为当我从0

+0

目前还不清楚你试图实现的是什么。您是否仅仅试图在数据中确定新数据集的起始位置,最初您认为它始终始于零,但现在已经发现新序列的起始位置可能为0,10,300或其他。如果是这样,只要新序列的开始总是小于先前的值,那么可能对'mock_data [i] [0]

回答

0

查找的例子开始我的标志才会获得真正的,如果我将使它像这样:

mock_data = ((23020, "in0"), 
 
      (23000, "in1"), 
 
      (23020, "in2"), 
 
      (0, "in3"), 
 
      (23060, "in4"), 
 
      (23080, "in5"), 
 
      (23100, "in6"), 
 
      (10, "in7"), 
 
      (100,"int8"), 
 
      (1000,"int9"), 
 
      (1020,"int10"), 
 
      (300,"int11")) 
 
mock_len = len(mock_data) 
 
epsilon = 20 
 
max_data = 0 
 
isInInterval = True 
 
for i in range(mock_len - 1): 
 
    if isInInterval == True: 
 
     if mock_data[i+1][0]-mock_data[i][0] == 20: 
 
      max_data = mock_data[i+1][0] 
 
      isInInterval = False 
 
      print max_data 
 
    if max_data != 0 and mock_data[i+1][0]>mock_data[i][0]+ 300: 
 
     isInInterval = True

代替如果max_data = 0和mock_data [I] [0] == 0:我确实如果米ax_data!= 0和mock_data [i + 1] [0]> mock_data [i] [0] + 300:但我不这样做是最好的方式。基本上我想改变那个标志,以pythonic的方式,以便当我遇到0时不必将标志重置为真。