2013-05-04 78 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)