0

如果我有这个元组列表:

[('123c', 0.0), ('123c1', 0.0), ('123c2', 0.10456917162915072), ('123c3', 0.097595441008939465), ('123c4', 0.0), ('12c35', 0.0), ('13836', 0.040490933063262943)]

如何在整个列表中找到最高值,并返回它所属的元组中的第一个元素?

对于上面的示例,结果将是:'123c2'因为0.10456917162915072是最高值

谢谢

4

2 回答 2

4

像这样的东西?

>>> a = [('123c', 0.0), ('123c1', 0.0), ('123c2', 0.10456917162915072), ('123c3', 0.097595441008939465), ('123c4', 0.0), ('12c35', 0.0), ('13836', 0.040490933063262943)]
>>> max(a, key = lambda x: x[1]) # Or max(a, key = itemgetter(1))
('123c2', 0.10456917162915072)
>>> max(a, key = lambda x: x[1])[0]
'123c2'

关于max()功能,

max(...)
    max(iterable[, key=func]) -> value
    max(a, b, c, ...[, key=func]) -> value

    With a single iterable argument, return its largest item.
    With two or more arguments, return the largest argument.

上例中的第二个参数max(...)是 key 函数,它让函数决定最大化哪个值。

于 2013-08-12T16:13:45.593 回答
1

您正在寻找最大值;该max()函数为您执行此操作,您可以为其提供一个函数来确定最大值以下决定:

from operator import itemgetter

max(inputlist, key=itemgetter(1))[0]

在这里,operator.itemgetter()提供该功能;它从您传递给它的任何对象中获取指定元素。

演示:

>>> inputlist = [('123c', 0.0), ('123c1', 0.0), ('123c2', 0.10456917162915072), ('123c3', 0.097595441008939465), ('123c4', 0.0), ('12c35', 0.0), ('13836', 0.040490933063262943)]
>>> from operator import itemgetter
>>> max(inputlist, key=itemgetter(1))[0]
'123c2'
于 2013-08-12T16:13:09.077 回答