Python 如何获取列表中最接近元素的元素的索引,该列表将被手动分配

Python 如何获取列表中最接近元素的元素的索引,该列表将被手动分配,python,python-3.x,list,Python,Python 3.x,List,所以我有一个清单 stock=[5,6,8,4,8,3,6,4] val=5 我想得到最接近列表中第一个val变量的元素的索引。所以我想要得到的是索引为3的4。如果val=8,那么我将得到索引为1的6,如果val=3,因为它是最低的值,我将得到-1,我已经尝试使用此代码 closest=min(范围(len(stock)),key=lambda i:abs(stock[i]-val)) 但它只返回val变量的索引,因为您的解决方案不处理所需的最接近但小于val的部分,以及-1边缘大小写。因此

所以我有一个清单

stock=[5,6,8,4,8,3,6,4]
val=5
我想得到最接近列表中第一个val变量的元素的索引。所以我想要得到的是索引为3的4。如果val=8,那么我将得到索引为1的6,如果val=3,因为它是最低的值,我将得到-1,我已经尝试使用此代码

closest=min(范围(len(stock)),key=lambda i:abs(stock[i]-val))
但它只返回val变量的索引,因为您的解决方案不处理所需的最接近但小于
val
的部分,以及
-1
边缘大小写。因此,它为您提供了
val
变量的索引,因为它总是有
0
的差异,这将由
min
返回

你需要像这样的东西-

INF=10**9
最近的=分钟(
范围(len(股票)),
key=lambda i:abs(库存[i]-val)如果库存[i]=val:
最近的=-1

lambda
中的
if
条件通过将差值分配给任意高的数字来处理小于
val
的部分,在我的例子中,我将其作为
10**9
。根据您的用例,这可以保持更高。另外,
val
min(stock)
的边缘情况由最后两行处理,这是您所采取的解决方案所需要的。

这涉及大量迭代,但仍然是找到所需内容的一种方法。。。如果图片中也有负值,则应修改

def one_expensive_way_to_find_what_you_need(list_, val):
   try:
      return list_.index(max((_ for _ in stock if _ < val)))
   except:
      return -1
def一种昂贵的方法来找到你需要的东西(列表,val):
尝试:
返回列表索引(最大值((uu表示库存,如果
我不太明白,你能给我解释一下吗?“最接近……的最大元素”哪一个更重要?例如,对于您的列表
stock
val=5
,生成的索引应该是
1
,因为
6
是最近的,还是
2
因为
8
是最大的元素?它将检查最接近它的元素,最接近它的元素是4,现在我得到了4的索引是3Ah。您的解决方案中的问题是,包含0个差异。但是您希望至少有一个差,所以请查找第二个最小的元素。codegolf听起来不错:对于
python list=[5,6,8,4,9,10,8,3,6,4]val=9,您的解决方案失败了
它选择8作为最接近9的最低数字,即使8直接低于9,但答案是4,因为我看到4最接近9。。最初的问题是找到最接近的最大元素。。因此,似乎体重年龄增加到了“最大”