首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果数字不在列表中,返回下一个最高数字+ python

如果数字不在列表中,返回下一个最高数字+ python
EN

Stack Overflow用户
提问于 2022-10-27 19:59:31
回答 4查看 65关注 0票数 -1

我需要检查一个数字是否存在的方法是一个列表/序列,如果它没有返回列表中的下一个最高的数字。

例如:-在列表nums = [1,2,3,5,7,8,20]中,如果要输入数字4,则函数将返回5,而> 8 < 20则返回20,依此类推。

下面是这个前提的一个非常基本的例子:

代码语言:javascript
运行
复制
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)

如果有办法处理熊猫的数据,那就更好了。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2022-10-27 20:22:21

这里有一种使用标准Python的方法(nums不需要排序):

代码语言:javascript
运行
复制
def coerce_num(x):
    return min((n for n in nums if n >= x), default=None)
代码语言:javascript
运行
复制
>>> coerce_num(4)
5
>>> coerce_num(9)
20

(在没有数字大于default=None的情况下添加了x)

票数 2
EN

Stack Overflow用户

发布于 2022-10-27 20:05:12

您可以使用递归函数coerce_num(x + 1)实现这一点,它将添加1并尝试再次搜索。

方法1

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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)
票数 0
EN

Stack Overflow用户

发布于 2022-10-27 20:47:56

假设排序列表,使用bisect进行有效的二进制搜索:

代码语言:javascript
运行
复制
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)
# 1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74227665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档