有没有更简单的方法来查找数字

时间:2014-02-26 11:50:08

标签: python list search numbers

我正在写一个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,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]

我需要解析列表并查看列表是否包含“50”。如果没有,我必须搜索少一个数字49.如果它不存在,我必须寻找48.我可以做到这一点到47。 在python中,是否有一个单行代码我可以做到这一点,或者我可以使用lambda吗?

6 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

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

如果没有符合条件的元素,它将引发ValueError

答案 2 :(得分:2)

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

或者,处理包含50以上所有元素的列表:

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

答案 3 :(得分:1)

您可以使用生成器表达式和最大值

执行此操作
max(n for n in b if n >= 47 and n <= 50)

答案 4 :(得分:0)

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

找到数字的三种不同方式,最高,最低,如果是50,则混合。 如果你需要检查你的hughe列表中是否有多个号码,那么你需要知道503040是否在那里:

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

答案 5 :(得分:0)

没有任何lambda的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,)))
相关问题