2014-02-26 121 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

它的工作方式是一样的,但是您确定没有括号,它是创建的发电机,还是仅列出? –

相关问题