2013-05-04 79 views
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))] 

这是一个双任务挑战。 Firslty,在列表second中,我需要确定一个元组中值最大的元组(在位置0处的值为:-2.503.00必须忽略)。然后,作为第二项任务,我们需要输出相应的元组形式列表first。所以应该导致:

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

这是因为在步骤中发现的最大价值首先应该是1.069258这是第一个元组内。

我在这里面临的障碍是找到具有最大价值的元组(我知道我可以使用max()来查找值,但我需要整个元组),第二部分问题我认为我会应对if声明。

回答

5

在1线:

>>> max(zip(first,second[0]),key=lambda x:max(x[1][1:]))[0] 
('-2.50', '1.91', '2.03') 
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') 
+0

,或等效但更简洁地说,'我= MAX(枚举(第二),键=拉姆达I_T:I_T [1] [ 1:])[0]'。 – Dougal 2013-05-04 20:30:25

+0

另请注意,您的解决方案最初将一个浮点数('-inf')与一个元组('t [1:]')进行比较,这并不理想。 – Dougal 2013-05-04 20:31:47

0

您要使用的关键函数来计算值由每个元组是相比较。要比较比第一其它最大值的元组,所以尽量

>>> max(second[0], key = lambda x: max(x[1:])) 
('-2.50', 0.889258, 1.069258)