在python字典中查找max和min值,并要求它们属于不同的键

时间:2017-06-28 20:28:29

标签: python dictionary

我正在遍历列表列表并记录每个列表的最大值和最小值。 我有以下代码,它使用数组的索引作为键来存储列表的最大值和最小值。

def maxAndMin( arrays):
        i=0
        d= {}
        for a in arrays:
            maxNum = max(a)
            minNum = min(a)
            d[i] = [minNum, maxNum]
            i+=1 
        print d

我想找到字典中的最大值,也是最小值,要求它们从不同的键映射到(在同一个数组中找不到)。找不到合适的解决方案了。

编辑:输入:[[1,3,4],[0,2,5]]。想要返回max = 5,min = 1或max = 4,min = 0。不是max = 5,min = 0,因为5和0在同一个列表中。

Edit2:首先找到值中的最大值,然后找到最小值,并要求最小值不要与最大值相同。

1 个答案:

答案 0 :(得分:1)

所以你你正在使用字典,但你的样本输入实际上是一个列表列表。以最直接的方式翻译您的要求,我们可以通过两个过程来实现这一目标:

  

首先查找值中的最大值,然后找到最小值和要求   最小值与最大值没有相同的键

>>> from operator import itemgetter
>>> l = [[1, 3, 4], [0, 2, 5]]
>>> flattened = ((i, e) for i, sub in enumerate(l) for e in sub)
>>> max_idx, maxval = max(flattened, key=itemgetter(1))
>>> minval = min(e for i, sub in enumerate(l) if i != max_idx for e in sub)
>>> print("Max:", maxval, "Min:", minval)
Max: 5 Min: 1

以上内容基本等同于以下内容:

>>> l = [[1, 3, 4], [0, 2, 5]]
>>> maxval = float('-inf')
>>> max_idx = 0
>>> for i, sub in enumerate(l):
...     for e in sub:
...         if e > maxval:
...             maxval = e
...             max_idx = i
...
>>> minval = float('inf')
>>> for i, sub in enumerate(l):
...     if i != max_idx:
...         for e in sub:
...             if e < minval:
...                 minval = e
...
>>> print("Max:", maxval, "Min:", minval)
Max: 5 Min: 1