我有一个值列表...一些是有效的,一些不是,无效包含无。我测试每个元素的有效性。当我找到无效元素时,我需要找到最接近的前一个索引和最接近的下一个有效值。我需要将列表视为一个循环,所以如果在初始元素之前/之后没有有效元素,它应该从列表的结尾/开始搜索...这样,如果至少有一个有效值列表中,将找到前一个和下一个有效值(如果列表中只有一个有效值,则它可以是相同的索引)。
好的,解释起来很复杂,当我尝试编码时会变得非常复杂。但我确信有一些简单而惯用的方法可以做到这一点。你能救我吗?
答案 0 :(得分:0)
我都不是程序员,但我使用这样的东西来分析24小时时钟周围的数据(这意味着,例如23:00在01:00之前等)。然后我将未知值计算为前一个和下一个已知值的加权平均值。参数是列表中未知元素的位置和列表本身:
def get_prev_known(i, some_list):
for j, item in enumerate(some_list[i::-1]+some_list[:i:-1]):
if j > 0 and item is not None:
return (i-j) % len(some_list)
def get_next_known(i, some_list):
for j, item in enumerate(some_list[i:]+some_list[:i]):
if j > 0 and item is not None:
return (i+j) % len(some_list)
它可以解决你的问题。