在嵌套循环中找到最小的max索引,密钥严格在第0个索引中

问题描述 投票:1回答:1

在某个索引的嵌套循环中查找最大值时,该键通常优先。如果列表中的最大值所在的键有多个最大值,则嵌套列表中的其他元素用于查找最大值的索引。

例:

my_list = [[1, 2], [2, 3], [2, 7]]
print(max(my_list))

输出:

[2, 7]

但是,我希望找到第0个索引中最大值的最小索引,而不会受到列表中其他值的任何干扰,并使用优化代码。

现在,这是我为实现目标所做的工作,而且看起来不是最有效的方法。

my_list = [[1, 2], [2, 3], [2, 7]]
maximum_val = max(my_list)[0]
for item in my_list:
    if item[0] == maximum_val:
        print(my_list.index(item))
        break

输出:

1

有人可以在不导入外部库的情况下,为当前代码提供更多时间优化的形式吗?

python python-3.x max
1个回答
1
投票

你要求max()找到最大的名单,[2, 7][2, 3]大,因为名单是ordered lexicographically

不要比较列表。使用key函数选择第一个整数:

max(my_list, key=lambda nested: nested[0])

这将返回my_list中的元素,key函数返回的值为最大值。如果多个元素具有相同的最大值,则返回第一个这样的元素:

>>> my_list = [[1, 2], [2, 3], [2, 7]]
>>> max(my_list, key=lambda nested: nested[0])
[2, 3]

接下来,要获取该元素的索引,请将索引传递给max(),并让key函数将这些索引映射到要比较的值:

max(range(len(my_list)), key=lambda idx: my_list[idx][0])

因此,这需要从0到(但不包括)my_list列表的长度的整数序列,然后使用key函数返回my_list列表中该索引处元素的第一个整数:

>>> my_list = [[1, 2], [2, 3], [2, 7]]
>>> max(range(len(my_list)), key=lambda idx: my_list[idx][0])
1
© www.soinside.com 2019 - 2024. All rights reserved.