0

鉴于这两个列表:

first = [('-2.50', '1.91', '2.03'), ('3.00', '1.83', '2.08')]
second = [(('-2.50', 0.889258, 1.069258), ('3.00', 0.931381, 1.021381))]

这是一项两项任务的挑战。首先,在 list 中second,我需要识别其中具有最大值的元组(而0此处位置的值:-2.50并且3.00必须被忽略)。然后,作为第二个任务,我们需要输出相应的元组形式 list first。所以它应该导致:

('-2.50', '1.91', '2.03')

这是因为在第一步中找到的最大值应该1.069258在第一个元组内。

我在这里面临的障碍是找到具有最大价值的元组(我知道我可以max()用来找到值,但我需要整个元组),我认为我会简单地使用if语句来处理问题的第二部分。

4

3 回答 3

5

在 1 行中:

>>> max(zip(first,second[0]),key=lambda x:max(x[1][1:]))[0]
('-2.50', '1.91', '2.03')
于 2013-05-04T20:32:04.497 回答
1

一个班轮:

>>> first [ max(enumerate(second[0]), key=lambda x: max(x[1][1:] ))[0] ]
('-2.50', '1.91', '2.03')

或者:

>>> maxx = float("-inf")
>>> for i,x in enumerate(second[0]):
...     temp = max(x[1:]) 
...     if temp > maxx:
...         index = i
...         maxx = temp
...         
>>> first[i]
('-2.50', '1.91', '2.03')
于 2013-05-04T20:27:22.607 回答
0

您想使用键函数来计算比较每个元组的值。您想通过除第一个以外的最大值比较元组,因此请尝试

>>> max(second[0], key = lambda x: max(x[1:]))
('-2.50', 0.889258, 1.069258)
于 2013-05-04T20:37:43.260 回答