找到元组中最小元素的最大值
如果我有一个列表
[[209, 34], [50, 170], [197, 32], [75, 156], [176, 51], [54, 141], [205, 19], [35, 173]]
我该怎么做才能找到其中最小元素最大的子列表呢?
比如在上面的例子中,答案是索引[3]
- [75,156]
,因为这个子列表的最小值比其他所有子列表的最小值都要大。
2 个回答
0
你可以使用 sorted
函数。
>>> lst = [[209, 34], [50, 170], [197, 32], [75, 156], [176, 51], [54, 141], [205, 19], [35, 173]]
[[209, 34], [50, 170], [197, 32], [75, 156], [176, 51], [54, 141], [205, 19], [35, 173]]
>>> sorted(lst, key=min, reverse=True)
[[75, 156],
[54, 141],
[176, 51],
[50, 170],
[35, 173],
[209, 34],
[197, 32],
[205, 19]]
key=min
的意思是,在排序这个列表的时候,它会用到 min
函数。
然后你可以用 index
方法来找到某个值的位置。比如:
>>> lst.index([75, 156])
3
6
这应该很简单:
max(list_of_iterables, key=min)
也就是说:
>>> lst = [[209, 34], [50, 170], [197, 32], [75, 156], [176, 51], [54, 141], [205, 19], [35, 173]]
[[209, 34], [50, 170], [197, 32], [75, 156], [176, 51], [54, 141], [205, 19], [35, 173]]
>>> max(lst, key=min)
[75, 156]
max
(最大值)和 min
(最小值)这两个函数的工作原理是,它们会遍历一个可迭代的对象(比如列表),然后比较每个元素,找出最大的(或者最小的,min
就是找最小的)元素。这里有个关键点,就是比较的内容是通过一个叫 key
的函数对每个元素进行处理后的结果。默认情况下,key
函数就是一个简单的身份函数,也就是说它返回的就是元素本身,但你可以自定义这个函数。在这个例子中,我的 key
函数是 min
,它会找出子列表中的最小值。然后我们就根据这些子列表的最小值进行比较,最终找出最大的值,这正是你问题中所要求的。