为了账号安全,请及时绑定邮箱和手机立即绑定

Python - 从索引 k 开始查找列表 A 中最小元素的索引

Python - 从索引 k 开始查找列表 A 中最小元素的索引

慕莱坞森 2021-06-11 14:00:06
我一直在寻找如何考虑“k”来解决以下问题。基本上,它应该从索引 k 开始,并在从 k 到列表末尾的范围内查找最小值。def find_min_index(A, k):    """    Finds the index of the smallest element in the list A from index k onwards    Parameters:        A (list)        k: index from which start search    Example use:    >>> find_min_index([1, 2, 5, -1], 0)    3    >>> find_min_index([1, 1, 1, 5, 9], 2)    2    """    minpos = A.index(min(A))    return minpos
查看完整描述

3 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

单线解决方案是这样的:

return A[k:].index(min(A[k:]) + k

您从 A[k:] 中选择最小元素,在 A[k:] 中找到它的索引并将 k 添加到它以补偿搜索区域。

一个稍微简洁的解决方案是这样的:

slice = A[k:]
return slice.index(min(slice)) + k


查看完整回答
反对 回复 2021-06-16
?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

您可以使用enumerate来查找 min 的索引:


def find_min_index(A, k):

    """

    Finds the index of the smallest element in the list A from index k onwards


    Parameters:

        A (list)

        k: index from which start search


    Example use:

    >>> find_min_index([1, 2, 5, -1], 0)

    3

    >>> find_min_index([1, 1, 1, 5, 9], 2)

    2

    """


    o, _ = min(enumerate(A[k:]), key=lambda i: i[1])

    minpos = k + o

    return minpos



print(find_min_index([1, 2, 3, 4], 1))

print(find_min_index([4, 3, 2, 1], 1))

输出


1

3


查看完整回答
反对 回复 2021-06-16
?
BIG阳

TA贡献1859条经验 获得超6个赞

enumerate在将列表切片k作为起始索引之前,您可以使用它来跟踪原始索引:


from operator import itemgetter

def find_min_index(A, k):

    return min(list(enumerate(A))[k:], key=itemgetter(1))[0]

以便:


print(find_min_index([1, 2, 5, -1], 0))

print(find_min_index([1, 1, 1, 5, 9], 2))

会输出:


3

2


查看完整回答
反对 回复 2021-06-16
  • 3 回答
  • 0 关注
  • 290 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号