找到元组中最小元素的最大值

1 投票
2 回答
1275 浏览
提问于 2025-04-18 08:10

如果我有一个列表

[[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,它会找出子列表中的最小值。然后我们就根据这些子列表的最小值进行比较,最终找出最大的值,这正是你问题中所要求的。

撰写回答