我正在遍历列表列表并记录每个列表的最大值和最小值。 我有以下代码,它使用数组的索引作为键来存储列表的最大值和最小值。
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:首先找到值中的最大值,然后找到最小值,并要求最小值不要与最大值相同。
答案 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