2013-02-21 36 views
-1

的值列表我在Python列表的2D名單,我需要找到最低漂浮在第1列,然後在同一行中返回值,但在列0Python的索引列表分鐘

mylist = [['someid-1', None] ,['someid-2', 4545.474] ,['someid-3', 200.1515] ,['someid-4', None] ,['someid-4', 0]] 

在這種情況下,我希望返回:someid-3

目前我追加只有值這是None,然後做到這一點:(這似乎複雜了這樣一個「簡單」的任務)

mylist.sort(key=lambda x: x[1]) 
    if len(temp_op_distance_list) != 0 and temp_op_distance_list[0][1] != None: 
     return temp_op_distance_list[0][0] 

有關整個Python項目的一些信息。

該列表約有8000個條目,其值爲'無',有些條目爲floats。 此代碼收集3D空間中的鼠標指針的距離並測試Programm中的所有3D對象。當有值None時,該對象未被擊中。

編輯:正確的列表格式 - 當然你都是對的,指出我的列表不正確。對於那個很抱歉。

+0

'200.1515'如何低於'0'?此外,這不是一個合法的Python列表,([[someid-1] [None]不是一個包含兩個元素的列表),這樣就不清楚你的意思或你的列表實際是什麼結構。你能列舉一個可以用Python進行評估的例子,比如'[[1,5],[3,12],[5,-3]]'嗎?這是你的意思嗎? – 2013-02-21 16:51:04

+0

您的列表格式不正確,您的意思可能是'[someid_1,None],'等等。 – 2013-02-21 16:57:19

回答

1

假設你的列表是一個適當的Python列表

mylist = [['someid-1', None] ,['someid-2', 4545.474] ,['someid-3', 200.1515] ,['someid-4', None] ,['someid-4', 0]] 

您可以簡單地創建一個生成器表達式,選擇只有有效的非零項,並確定min使用該密鑰作爲itemgetter(1)

>>> from operator import itemgetter 
>>> min((e for e in mylist if e[1]), key = itemgetter(1))[0] 
'someid-3' 
+0

我的腦袋沒有以合適的效率級別運行。當然'min()'更有意義.. – 2013-02-21 17:03:42

+0

感謝你們所有人的回答,明天我會測試代碼。 – mogh 2013-02-21 22:12:31

+0

它的工作!再次感謝。 – mogh 2013-02-22 07:45:43

0

min()聯合filtering

from operator import itemgetter 

id = min(filter(itemgetter(1), mylist), key=itemgetter(1))[0] 
  • filter(itemgetter(1), mylist)刪除其第二個元素是falsey所有元素;在布爾上下文中的False。這包括0None

  • min(..., key=itemgetter(1))根據您給出的鍵找到最低值;所以篩選後浮點值最低的列表。

  • [0]從列表中選擇ID條目。

一個快速演示(帶有語法正確輸入列表):

>>> mylist = [ 
...  ['someid-1', None], 
...  ['someid-2', 4545.474], 
...  ['someid-3', 200.1515], 
...  ['someid-4', None], 
...  ['someid-5', 0] 
... ] 
>>> from operator import itemgetter 
>>> min(filter(itemgetter(1), mylist), key=itemgetter(1))[0] 
'someid3' 
+0

感謝您指出要從導入操作導入'itemgetter' – mogh 2013-02-22 07:45:17