此代码有效。但我忍不住觉得这是一个 hack,尤其是“抵消”部分。我必须把它放在那里,否则每次我执行删除操作时,删除中的所有索引值都会移动 1。
# remove outliers > devs # of std deviations
devs = 1
deletes = []
for num, duration in enumerate(durations):
if (duration > (mean_duration + (devs * std_dev_one_test))) or \
(duration < (mean_duration - (devs * std_dev_one_test))):
deletes.append(num)
offset = 0
for delete in deletes:
del durations[delete - offset]
del dates[delete - offset]
offset += 1
关于如何让它变得更好的想法?
请您参考如下方法:
在遍历列表时构建守护者列表:
def isKeeper( duration ):
if (duration > (mean_duration + (devs * std_dev_one_test))) or \
(duration < (mean_duration - (devs * std_dev_one_test))):
return False
return True
durations = [duration for duration in durations if isKeeper(duration)]
