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

时间:2018-09-12 11:34:11

标签: python list indexing min

为了解决以下问题,我一直在寻找如何采用“ 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

4 个答案:

答案 0 :(得分:1)

单线解决方案是这样:

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

您从A [k:]中选择最小元素,在A [k:]中找到其索引,然后向其中添加k以补偿搜索区域。

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

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

答案 1 :(得分:0)

您可以将k添加到根据切片输入列表计算出的索引中:

def find_min_index(A, k):
    sliced = A[k:]
    return k + sliced.index(min(sliced))

find_min_index([1, 2, 5, -1], 2)    # 3
find_min_index([1, 1, 1, 5, 9], 2)  # 2

答案 2 :(得分:0)

您可以使用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

答案 3 :(得分:0)

在使用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