首页 > 解决方案 > 获取列表中最近的非无项目

问题描述

我需要找到一种方法,让 anarray和 anindex获取该索引中项目的最接近的 non-None 值。

例如:

array = [4, 5, 1, None, 9, None, 7, 8]
index = 4

我需要array[index] 在左侧和右侧获取最接近的整数:

print(array[index])
# 9

预期输出:

on_left = 1
on_right = 7

当前解决方案

这就是我所拥有的:

value = array[index]
new_array = [val for val in array if val]                                                                        
print(new_array)
# [4, 5, 1, 4, 7, 8]
                                                                                                                   
new_array.index(value)
# 0

*然后我将使用该索引来获取右侧和左侧项目

如您所见,这里的问题发生在重复数字时,在此示例中,我得到的是第一个4而不是第二个的索引,您将如何解决这个问题?

标签: pythonarrayspython-3.x

解决方案


您可以在数组的子集上使用 next 函数,从下一个位置向前(右侧)开始,在前一个位置向后(左侧):

array    = [4, 5, 1, None, 4, None, 7, 8]
index    = 4
on_right = next(v for v in array[index+1:]    if v is not None)
on_left  = next(v for v in array[index-1::-1] if v is not None)

print(on_left,on_right) # 1 7

推荐阅读