-1

我在 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 个条目,其值为 'None' 和 some floats。此代码收集到 3D 空间中 Mousepointer 的距离并测试 Programm 中的所有 3D 对象。当有值时None,对象没有被击中。

编辑:正确的列表格式-当然你们都是对的,指出我的列表不正确。对于那个很抱歉。

4

2 回答 2

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'
于 2013-02-21T16:59:25.480 回答
0

结合过滤min():_

from operator import itemgetter

id = min(filter(itemgetter(1), mylist), key=itemgetter(1))[0]
  • filter(itemgetter(1), mylist)删除第二个元素为假的所有元素;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'
于 2013-02-21T16:52:22.720 回答