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