Python索引最小值列表列表

时间:2013-02-21 16:49:39

标签: python list min nonetype type-2-dimension

我在Python中有一个列表的2D列表,我需要在第1列中找到最低的浮点数,然后在同一行中返回值,但是在第0列。

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个条目,其值为“无”,一些floats。 此代码收集3D空间中鼠标指针的距离并测试程序中的所有3D对象。当值None时,对象未被击中。

已编辑:正确的列表格式 - 当然你们都是对的,指出我的列表不正确。对不起。

2 个答案:

答案 0 :(得分:1)

假设您的列表是正确的Python列表

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

您只需创建一个生成器表达式,仅选择有效非零项目,并使用密钥min确定itemgetter(1)

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

答案 1 :(得分:0)

filteringmin()结合使用:

from operator import itemgetter

id = min(filter(itemgetter(1), mylist), key=itemgetter(1))[0]
  • filter(itemgetter(1), mylist)删除第二个元素为false的所有元素;布尔上下文中的False。其中包括0None

  • 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'