2013-03-13 71 views
1

我有元組的列表:查找號碼cerain值

lst = [('54', '1.74', '253.2'), ('342', '2.85', '13.46'), ('53','2.43', '15.63')] 

我想在最近[1]位置找到與項目的元組2.0

我是這樣的:

number = lst[0][1] 
for i in lst: 
    if abs(float(i[1]) - 2) < float(number): 
     number = i[1] 
     if number in i: 
      print i 

但是,當我試圖將字符串轉換爲浮動它拋出一個異常; /我怎樣才能真正做到這一點?

+0

https://stackoverflow.com/questions/9706041/finding-index-of-an-item-closest-to-the-value-in-a-list-thats-不完全排序 – 2017-11-14 08:59:47

回答

7

這應該做的伎倆......

min(lst,key=lambda x: abs(float(x[0]) - 2)) 

min功能將基於該key功能列表中的每個元素進行比較。

演示:

>>> lst = [('1.74', '253.2'), ('2.85', '13.46'), ('2.43', '15.63')] 
>>> min(lst,key=lambda x: abs(float(x[0]) - 2)) 
('1.74', '253.2') 
+0

非常感謝您的回覆。然而,有些東西對我來說不起作用; /。我颳了一個網站,我的代碼如下所示:'lst = re.findall(pattern,html)'產生一個3項目元組列表[''54','1.74','253.2'), ('342','2.85','13 .46'),('53','2.43','15 .63')]'繼續'lst = min(lst,key = lambda x:abs(float(x [1 ] - 2))'和'print lst'我得到一個'Invalid syntax'錯誤,你知道這是什麼? – nutship 2013-03-13 21:10:28

+1

你錯誤地放了一個paren,你需要:'abs(float(x [1]) - 2)',而不是'ABS(浮動(X [1] - 2)。)' – Maus 2013-03-13 21:31:22

+0

謝謝你的sooo多@Maus你甚至不知道有多少這讓我心煩笑:) – nutship 2013-03-13 21:53:17