我有一个列表,其中有多个重复的最小元素,如下所示:
a = [1,2,1,1,4,5,6]
我希望Python能够返回列表中元素1
及其所在的所有索引。我尝试使用过
min_index, min_value = min(enumerate(a), key=operator.itemgetter(1))
该函数仅返回第一个出现1
的索引位置。
我会这样做:
minimum = min(a)
indices = [i for i, v in enumerate(a) if v == minimum]
def locate_min(a):
smallest = min(a)
return smallest, [index for index, element in enumerate(a)
if smallest == element]
>>> locate_min([1, 2, 1, 1, 4, 5, 6])
(1, [0, 2, 3])
def locate_min(a):
min_indicies = []
smallest = min(a)
for index, element in enumerate(a):
if smallest == element: # check if this element is the minimum_value
min_indicies.append(index) # add the index to the list if it is
return smallest, min_indicies
min
,另一次用于找到所有与之匹配的元素。在比较操作耗时较长或数据集非常大的情况下,您可能希望只进行一次循环。以下是一个示例:def locate_min(a):
enumerated_iter = enumerate(a)
index, min_value = next(enumerated_iter)
indexes = [index]
for index, value in enumerated_iter:
if value == min_value:
indexes.append(index)
elif value < min_value:
min_value = value
indexes = [index]
return min_value, indexes
enumerate
是一个迭代器。这允许使用 next
来从序列中“弹出”第一个值以启动搜索。然后可以在 for
循环中继续使用它。