找到一个大于定义参数的最小数字

3 投票
2 回答
2049 浏览
提问于 2025-04-21 08:27

我想在一个列表中找到一个比我给的数字大但又最接近它的数字。

比如说:

num = 20
li = [19,23,24,1,2]

我想得到23。

我试着这样做:

hour = min(dfHour, key=lambda x:(x-localtime[3])>0)

但是它只返回了最接近的那个数字,即使它并不大于我给的数字。

还有一个问题是,如果列表中有另一个23,我该如何返回它们两个(它们的索引就可以了)

2 个回答

2

这里有一个解决方案:

num = 20

li = [19,23,24,1,2]
higher = []

for number in li:
    if number > num:
        higher.append(number)

if higher:
    lowest = sorted(higher)[0]

print(lowest)

你可以很简单地把它转换成一个函数:

def closest(num, li):
    higher = []

    for number in li:
        if number > num:
            higher.append(number)

    if higher:
        lowest = sorted(higher)[0]

        return lowest
    else:
        return "Error"
5

你也可以使用过滤器:

print min(filter(lambda x: x > num,li))
23

如果你有重复的值:

num = 20
li = [19,23,24,23,1,2]
li_sort = sorted(x for x in li if x > num)
print [x for x in li_sort  if x == li_sort[0]]

撰写回答