2014-02-26 120 views
0

我在寫一個python腳本。有沒有簡單的方法來找到一個數字

我有號碼的列表:

B = [55.0,54.0,54.0,53.0,52.0,51.0,50.0,49.0,48.0,47.0, 45.0,45.0,44.0,43.0,41.0 ,40.0,39.0,39.0,38.0,37.0,36.0,35.0,34.0,33.0,32.0,31.0,30.0,28.0,27.0,27.0,26.0,25.0,24.0,23.0,22.0,22.0,2.0,19.0,18.0,17.0 ,16.0,15.0,14.0,13.0,11.0,11.0,10.0,9.0,8.0,7.0,6.0,5.0,4.0,3.0,2.0,1.0]

我需要解析列表並查看列表是否存在包含'50'。如果沒有,我必須搜索少一個數字49.如果它不在那裏,我必須尋找48.我可以做到這一點到47. 在Python中,是否有一個單行代碼,我可以做到這一點,或者我可以爲此使用lambda?

+0

是不是更容易找到MAX值低於或等於50且高於46?你可以用班輪方式或對數方式做 – DmitryK

+0

'max(b)'? – msvalkon

+0

'如果50中b'和'lowestValue = min(b)'和'maximumVal = max(b)' – Torxed

回答

0
highestValue = max(b) 
lowestValue = min(b) 
if 50 in b: 
    pass 

三種不同的查找數字的方法,最高,最低和50是否在混合中。 如果你需要檢查,如果多個號碼是你的休斯名單,說你需要知道,如果503040是在那裏:

set(b).issuperset(set([50, 40, 30])) 
3

你可以使用min()abs()

>>> b = [55.0, 54.0, 54.0, 53.0, 52.0, 51.0, 50.0, 49.0, 48.0, 47.0, 45.0, 45.0, 44.0, 43.0, 41.0, 40.0, 39.0, 39.0, 38.0, 37.0, 36.0, 35.0, 34.0, 33.0, 32.0, 31.0, 30.0, 28.0, 27.0, 27.0, 26.0, 25.0, 24.0, 23.0, 22.0, 22.0, 20.0, 19.0, 18.0, 17.0, 16.0, 15.0, 14.0, 13.0, 11.0, 11.0, 10.0, 9.0, 8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0] 
>>> min(b, key=lambda x:abs(x-50)) 
50.0 
>>> min(b, key=lambda x:abs(x-20.1)) 
20.0 
+0

+1這是唯一適當的解決方案,直到現在:) – thefourtheye

2
max(i for i in b if i <= 50) 

如果沒有與條件匹配的元素,將會產生一個ValueError

+1

'b = [51,52,53]':) – thefourtheye

+1

這很好,但可能會添加一個評論,如果沒有匹配的元素會引發ValueError如果。 – msvalkon

+4

從[Python3.4 +開始](http://docs.python.org/3.4/whatsnew/3.4.html#other-language-changes),您現在可以將默認值傳遞給'max'和'min'處理空的迭代場景。 –

2
max(filter(lambda i: i<=50, b)) 

,或者處理名單上面50的所有元素:

max(filter(lambda i: i<=50, b) or [None]) 
+0

'b = [51,52,53]' – thefourtheye

+0

@thefourtheye。感謝您的更正:第二種形式處理這種情況 – Don

1

您可以用生成器表達式和最大做到這一點。

max(n for n in b if n >= 47 and n <= 50) 
0

Oneliner沒有任何拉姆達(提高ValueError如果沒有找到值):

max((x for x in b if 46 < x <= 50)) 

,或者在這種情況下返回None版本:

from itertools import chain 
max(chain((x for x in b if 46 < x <= 50), (None,))) 
+0

這實際上比使用*和*更好,也只需要一組括號。 – Tim

+0

它的工作方式是一樣的,但是您確定沒有括號,它是創建的發電機,還是僅列出? –

相關問題