在列表中查找大于给定值的最小元素

时间:2019-08-27 04:55:05

标签: python math

我正在编写一个函数,该函数返回大于列表中某个值的数字的最小值。例如,如果给定的值是[1,2,3,4,5]中的3,则应返回4。但是,我的任何尝试都无济于事。

我使用了'min'函数,并尝试了while和for循环来解决问题。

def smallest_greater(seq, value):
    i = 0
    while i < len(seq):
        if seq[i] > value:
            i = i + 1
    return min(seq[i])

def smallest_greater(seq, value):
    i = 0
    for value in seq:
        if seq[i] > value:
            i = i + 1
    return min(seq[i])

如果我尝试使用while循环运行代码,它将不会执行代码。如果我使用for循环运行代码,则会显示“ TypeError:'int'对象不可迭代”

5 个答案:

答案 0 :(得分:3)

您的while循环将变为无限循环,除非seq中的每个数字都大于value(这是发生的情况,因为i永远不会超过{{1} })

此外,递增len(seq)的结果是数量大于value的数量,而不是精确地给出最小的索引。

您可以使用列表理解功能在一行中完成此操作:

i

输出:

min(i for i in [1,2,3,4,5] if i > 3)

答案 1 :(得分:0)

证明您获得了无序的数字列表,那么您需要首先对列表进行排序。

在您的代码上,如果您将smallest_greater中的>切换为<=,则第一个if seq[i] > value:应该可以工作。但是,返回值不应为min(seq[i]),而应仅为seq[i]。对于另一个问题,问题是您用value覆盖了for loop的值,导致代码失败。

修复您的第一个功能后,您将获得一个具有以下功能的代码:

def smallest_greater(seq, value):
    seq.sort()
    i = 0
    while i < len(seq):
        if seq[i] <= value:
            i = i + 1
        else: return seq[i]

应该提供所需的输出。

编辑:

如果我要这样做,它将是:

def smallest_greater(seq, value):
    try:
        return min(x for x in seq if x > value)
    except ValueError:
        return None

答案 2 :(得分:0)

您的代码取至少一个值,而应取最小的过滤列表。首先用满足条件的期望值填充另一个列表,然后取最小值:

In [3]: def smallest_greater(seq, value):
   ...:     lst = []
   ...:     for s in seq:
   ...:         if s > value:
   ...:             lst.append(s)
   ...:     return min(lst)


In [4]: smallest_greater([1, 2, 3, 4, 5, 6], 5)
Out[4]: 6

In [5]: smallest_greater([1, 2, 3, 4, 5, 6], 3)
Out[5]: 4

答案 3 :(得分:0)

seq.sort()
i = seq.index(value)
if (i < seq.size() - 1):
    return seq[i+1]
else return seq[i]

排序数组,找到值的索引,列表中的下一个值将比您的值最小。 if语句检查您的值是否在数组中最大

答案 4 :(得分:0)

排序和最小都使用额外的循环。您可以在一个循环中完成操作以获得更好的性能

k = 3
x = None
for item in a:
    x = item if item > k and (x is None or x > item) else x

现在,如果没有其他任何元素,则x中具有最小的较大元素