列表中的最小值 - Python

0 投票
3 回答
1132 浏览
提问于 2025-04-18 01:15

我正在尝试写一个函数,这个函数接收一个列表作为输入,然后返回这个列表中最小数字的索引位置。
比如说,

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

我建议使用 for ... 循环和 enumerate() 函数:

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 的保护

0

既然你已经知道怎么找到最小值了,你只需要把这个最小值放进index()函数里,就能得到这个值在列表中的位置。也就是说,

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

这样就会返回列表中最小值的位置。需要注意的是,如果有多个最小值,它只会返回第一个出现的那个位置。

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

补充说明:如果列表是空的,就返回None。

撰写回答