Python 获取列表中最小值的索引
我在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
from operator import itemgetter
id = min(filter(itemgetter(1), mylist), key=itemgetter(1))[0]
filter(itemgetter(1), mylist)
会去掉所有第二个元素为假值的元素;在布尔上下文中,假值包括False
、0
和None
。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'