我需要检查一个数字是否存在的方法是一个列表/序列,如果它没有返回列表中的下一个最高的数字。
例如:-在列表nums = [1,2,3,5,7,8,20]中,如果要输入数字4,则函数将返回5,而> 8 < 20则返回20,依此类推。
下面是这个前提的一个非常基本的例子:
nums = [1,2,3,5,7,8,20]
def coerce_num(x):
if x in nums:
return print("yes")
else:
return ("next number in list")
coerce_num(9)如果有办法处理熊猫的数据,那就更好了。
发布于 2022-10-27 20:22:21
这里有一种使用标准Python的方法(nums不需要排序):
def coerce_num(x):
return min((n for n in nums if n >= x), default=None)>>> coerce_num(4)
5
>>> coerce_num(9)
20(在没有数字大于default=None的情况下添加了x)
发布于 2022-10-27 20:05:12
您可以使用递归函数coerce_num(x + 1)实现这一点,它将添加1并尝试再次搜索。
方法1
nums = [1,2,3,5,7,8,20]
def coerce_num(x):
if x > max(nums):
return None
if x in nums:
return print("yes", x)
else:
coerce_num(x + 1)
coerce_num(6)方法2
nums = [1,2,3,9,7,8,20]
nums.sort()
def coerce_num(x):
for i in nums:
if x == i:
return print("yes", x)
if x < i:
return print("next highest", i)发布于 2022-10-27 20:47:56
假设排序列表,使用bisect进行有效的二进制搜索:
import bisect
nums = [1,2,3,5,7,8,20]
def coerce_num(nums, x):
return x[bisect.bisect_left(x, nums)]
coerce_num(8, nums)
# 8
coerce_num(20, nums)
# 20
coerce_num(0, nums)
# 1https://stackoverflow.com/questions/74227665
复制相似问题