【问题标题】:Python index min value list of listPython索引最小值列表列表
【发布时间】:2013-02-21 16:49:38
【问题描述】:

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

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

在这种情况下,我想返回:someid-3

目前我正在附加 onlynot 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 空间中 Mousepointer 的距离并测试 Programm 中的所有 3D 对象。当有值None 时,对象没有被击中。

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

【问题讨论】:

  • 200.15150 低多少?此外,这不是一个合法的 Python 列表([someid-1][None] 不是一个包含两个元素的列表),因此不清楚您的意思或您的列表实际上是什么结构。您能否展示一个可以在 Python 中计算的列表示例,例如[[1, 5], [3, 12], [5, -3]]?你指的是那种列表吗?
  • 您的列表格式不正确,您的意思可能是[someid_1, None],

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


【解决方案1】:

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

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

您可以简单地创建一个生成器表达式,只选择有效的非零项并使用 itemgetter(1) 的键来确定 min

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

【讨论】:

【解决方案2】:

filteringmin() 结合起来:

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'

【讨论】:

  • 感谢您指出要导入from operator import itemgetter
猜你喜欢
  • 2019-06-06
  • 2014-07-09
  • 2021-12-17
  • 2016-09-06
  • 2015-10-24
  • 1970-01-01
  • 2012-07-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多