这是我的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)
例如,我是否会这样做:
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:我做了如果max_data!= 0和mock_data [i + 1] [0]&gt ; mock_data [i] [0] + 300:但我不这是最好的方法。基本上我想以pythonic的方式改变那面旗帜,以便在遇到0时我不必将我的旗帜重置为True。