Python - находит индекс наименьшего элемента в списке A, начиная с индекса k и далее - PullRequest
0 голосов
/ 12 сентября 2018

Я застрял в поиске, как я могу принять во внимание "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 голосов
/ 12 сентября 2018

Вы можете использовать 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
0 голосов
/ 12 сентября 2018

Вы можете использовать перечислить , чтобы найти индекс 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
0 голосов
/ 12 сентября 2018

Однострочное решение таково:

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

Вы выбираете минимальный элемент из A [k:], находите его индекс в A [k:] и добавляете k к нему, чтобы компенсировать область поиска.

Немного более аккуратное решение:

slice = A[k:]
return slice.index(min(slice)) + k
0 голосов
/ 12 сентября 2018

Вы можете добавить 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
...