例如,
l = [1, -9, 2, 5, 9, 16, 11, 0, 21]
如果范围是10(10表示大于10的任何数字都不会被视为最大值),我希望代码返回9。
最佳答案
您可以先删除所有太大的元素,然后找到最大值:
filtered = filter(lambda x: x <= limit, list)
val = max(filtered, default = None) # the `default` part means that that's returned if there are no elements
filtered
是一个filter
对象,其中包含所有小于或等于限制的元素。 val
是最大值。或者,
filtered = [x for x in list if x <= limit]
val = max(filtered, default = None)
filtered
当且仅当它们小于限制时,才包含列表中的所有元素。 val
是filtered
的最大值。或者,
val = max((x for x in list if x <= limit), default = None)
这通过使用参数理解将上述方法的两个步骤组合在一起。
或者,
val = max(filter(limit.__ge__, list), default = None)
limit.__ge__
是表示x => limit >= x
的函数(ge表示大于等于)。这是最短且最不易读的编写方式。也请重命名
list
list
是全局变量(Python中的list
类型)。请不要覆盖全局变量; _;关于python - 有没有办法找到一个范围之间的最大值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46919861/