Python 获取列表中最小值的索引

-1 投票
2 回答
2843 浏览
提问于 2025-04-17 16:39

我在Python中有一个二维列表,也就是一个列表里面又包含了很多列表。我需要找到第一列中最小的浮点数,然后返回同一行中第一列的值。

mylist =  [['someid-1', None] ,['someid-2', 4545.474] ,['someid-3', 200.1515] ,['someid-4', None] ,['someid-4', 0]]

在这个例子中,我想返回的是:someid-3

目前我只在添加不是 None 的值,然后再进行这个操作:(这对于这么一个“简单”的任务来说,感觉有点复杂)

    mylist.sort(key=lambda x: x[1])
    if len(temp_op_distance_list) != 0 and temp_op_distance_list[0][1] != None:
        return temp_op_distance_list[0][0]

关于整个Python项目的一些信息。

这个列表大约有8000个条目,其中有一些值是'None',还有一些是 floats。这段代码收集了鼠标指针在三维空间中的距离,并测试程序中的所有三维对象。当值为 None 时,表示这个对象没有被击中。

编辑:正确的列表格式 - 当然你们都说得对,指出我的列表格式不正确。对此我感到抱歉。

2 个回答

0

过滤min()结合起来使用:

from operator import itemgetter

id = min(filter(itemgetter(1), mylist), key=itemgetter(1))[0]
  • filter(itemgetter(1), mylist)会去掉所有第二个元素为假值的元素;在布尔上下文中,假值包括False0None

  • min(..., key=itemgetter(1))会根据你给的关键字找到最低的值;也就是说,它会在过滤后的列表中找到最小的浮点数值。

  • [0]用来从你的列表中选择出id这一项。

下面是一个快速演示(使用一个语法正确的输入列表):

>>> mylist = [
...     ['someid-1', None], 
...     ['someid-2', 4545.474], 
...     ['someid-3', 200.1515], 
...     ['someid-4', None], 
...     ['someid-5', 0]
... ]
>>> from operator import itemgetter
>>> min(filter(itemgetter(1), mylist), key=itemgetter(1))[0]
'someid3'
1

假设你的列表是一个标准的Python列表

mylist =  [['someid-1', None] ,['someid-2', 4545.474] ,['someid-3', 200.1515] ,['someid-4', None] ,['someid-4', 0]]

你可以很简单地创建一个生成器表达式,只选择有效的非零项,然后使用itemgetter(1)作为关键字来找出最小值

>>> from operator import itemgetter
>>> min((e for e in mylist if e[1]), key = itemgetter(1))[0]
'someid-3'

撰写回答