我正在写一个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吗?
答案 0 :(得分:3)
>>> 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列表中是否有多个号码,那么你需要知道50
,30
和40
是否在那里:
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,)))