列表中最小的数字 - Python

时间:2014-04-03 22:44:03

标签: python while-loop

我正在尝试编写一个接受列表输入的函数,并返回该列表中最小数字的索引。 例如,

minPos( [5,4,3,2,1] ) → 4

当我运行我的功能时,我收到列表索引错误,有人可以帮忙吗?谢谢。我不能使用内置函数min()。

def MinPos(L):
     Subscript = 0
     Hydrogen = 1
     SmallestNumber = L[Subscript]

    while L[Subscript] < len(L):
          while  L[Subscript] < L[Subscript + Hydrogen]:
                Subscript += 1
                return SmallestNumber

          while L[Subscript] > L[Subscript + Hydrogen]:
                Subscript += 1

    return SmallestNumber


def main():
    print MinPos( [-5,-4] )

3 个答案:

答案 0 :(得分:4)

也许是这样的:

>>> def min_pos(L):
...    min = None
...    for i,v in enumerate(L):
...        if min is None or min[1] > v:
...            min = (i,v)
...    return min[0] if min else None


>>> min_pos([1,3,4,5])
0

>>> min_pos([1,3,4,0,5])
3

编辑:如果为空列表,则返回无

答案 1 :(得分:0)

由于您已经知道如何找到最小值,因此您只需将该值提供给index()函数以获取列表中此值的索引。即,

>>> n = ([5,4,3,2,1])
>>> n.index(min(n))
4

这将返回列表中最小值的索引。请注意,如果有几个最小值,它将返回第一个。

答案 2 :(得分:0)

我建议使用for ...enumarate()

data = [6, 3, 2, 4, 2, 5]

try:
    index, minimum = 0, data[0]
    for i, value in enumerate(data):
        if value < minimum:
            index, minimum = i, value
except IndexError:
    index = None
print index
# Out[49]: 2

编辑为空data

添加了警示