【问题标题】:How do I ignore negative numbers when finding the minimum in a group of tuples?在一组元组中找到最小值时如何忽略负数?
【发布时间】:2019-01-11 02:17:02
【问题描述】:

我有一本字典:

d = {'a': (1, 2, 'a'), 'b': (1, 2, 'b'), 'c': (2, 4, 'c'), 'd': (1, 3, 'd'), 'e': (0, 1, 'e'), 'f': (0, 1, 'f'), 'g': (1, 3, 'g'), 'h': (0, 1, 'h'), 'j': (1, 2, 'j'), 'i': (0, 1, 'i'), 'k': (-1, 0, 'k')}

我想找出字典中所有值中的最小值。但是,在最后一个键 (k) 上有一个 -1。

如何忽略该键/值而不删除它?或者是唯一的删除方法:

'k': (-1, 0, 'k')

然后使用 min()。

这是我的代码:

print(min(d.values()))

当前输出:

(-1, 0, 'k')

预期输出:

(0, 1, 'e')

【问题讨论】:

    标签: python


    【解决方案1】:

    当您调用min 时,您可以“过滤”以否定开头的元组而不包括它们:

    d = {'a': (1, 2, 'a'), 'b': (1, 2, 'b'), 'c': (2, 4, 'c'), 'd': (1, 3, 'd'), 'e': (0, 1, 'e'), 'f': (0, 1, 'f'), 'g': (1, 3, 'g'), 'h': (0, 1, 'h'), 'j': (1, 2, 'j'), 'i': (0, 1, 'i'), 'k': (-1, 0, 'k')}
    
    print(min(tup for tup in d.values() if tup[0] >= 0))
    

    输出:

    (0, 1, 'e')
    

    【讨论】:

      【解决方案2】:

      您可以通过将key 函数传递给min 来强制负值排名更高:

      min(d.values(), key=lambda x: (x[0]<0, x))
      #(0, 1, 'e')
      

      对于负值,x[0]&lt;0 将为 1,因此它们的排序高于正值。最后,对于正值,x 将用于查找最小值。

      【讨论】:

      • 这不会按字典顺序对项目进行排序。
      • 好的,那么你可以把它改成key = lambda x: (x[0]&lt;0, x)。这取决于 OP 想要什么。
      • 公平,这是一个快速简单的修改。
      【解决方案3】:

      另一个变体是使用filter函数:

      min(filter(lambda x: x[0] >= 0, d.values()))
      

      【讨论】:

        猜你喜欢
        • 2021-12-25
        • 2019-09-10
        • 1970-01-01
        • 2022-01-24
        • 2020-12-19
        • 2018-07-04
        • 2012-10-18
        • 2021-02-10
        相关资源
        最近更新 更多