【问题标题】:Return the smallest element value in a list of lists返回列表列表中的最小元素值
【发布时间】:2014-01-21 12:10:34
【问题描述】:

给定这样的列表:

[["fileA",7],["fileB",4],["fileC",17],["fileD",15]]

如何返回与最小值关联的第一个元素?在本例中,“fileB”具有最小值 (4)。我猜最短的方法是使用列表理解。

【问题讨论】:

    标签: python


    【解决方案1】:

    实际上,列表推导式并不是最好的工具。相反,您应该使用min、它的key functionoperator.itemgetter

    >>> from operator import itemgetter
    >>> lst = [["fileA",7],["fileB",4],["fileC",17],["fileD",15]]
    >>> min(lst, key=itemgetter(1))
    ['fileB', 4]
    >>> min(lst, key=itemgetter(1))[0]
    'fileB'
    >>>
    

    【讨论】:

      【解决方案2】:

      无需导入任何内容即可:

      min(lst, key = lambda x: x[1])[0]
      

      【讨论】:

      • 我会说@sashkello 的答案根据这个答案更好:stackoverflow.com/questions/2705104/…
      • @Mehdi 这是 2010 年的答案,我不确定自那以后是否发生了变化,但它可能会发生变化。
      【解决方案3】:

      我想出了这个奇怪的想法,它只使用简单的生成器表达式:

      min((x[1], x[0]) for x in lst)[1]
      

      这是基于默认情况下对元组/列表的第一个元素进行最小化的事实。

      【讨论】:

      • 这实际上不是列表理解。它是一个生成器表达式。
      • @iCodez 是的,已编辑。 (我认为这就是 OP 在谈到列表理解时的意思)
      【解决方案4】:

      您可能应该只是将数据转换为字典,因为这似乎比拥有列表列表更明智。然后,您可以更轻松地操作和访问您的数据。

      myLists = [["fileA",7],["fileB",4],["fileC",17],["fileD",15]]
      myDict = dict(myLists)
      min(myDict, key=myDict.get)
      # 'fileB'
      

      【讨论】:

      • myDict = dict(myLists) :)
      • 虽然这不是当前问题的最佳答案,但如果该列表用于以后的其他事情,这可能是可行的方法。
      • @gnibbler 酷,不知道它会自动正确转换。虽然它在 dict 理解中的作用基本相同。
      猜你喜欢
      • 1970-01-01
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      • 2017-07-22
      • 1970-01-01
      • 2016-12-30
      • 2021-12-15
      • 2018-07-09
      相关资源
      最近更新 更多