Python 如何在包含多个最小值的列表中查找只有一个最小值的索引

Python 如何在包含多个最小值的列表中查找只有一个最小值的索引,python,Python,如果要在此列表中找到最小值(即2),则列表a中2的相应索引分别为0、1和3 如何告诉python在最高索引处使用最小值(索引3处的数字2)您可以使用a[:-1]简单地反转列表,然后应用相同的技术来查找索引a[:-1]。索引(min(a))将给出从末尾开始的最小值索引,为了将索引w.r.t记录到第0位(列表开始),我们可以从len(a)-1减去a[:-1]。索引(min(a)) a = [2, 2, 4, 2, 5, 7] 遍历枚举列表并使用最大索引: a = [2, 2, 4, 2, 5, 7

如果要在此列表中找到最小值(即
2
),则列表
a
2
的相应索引分别为0、1和3


如何告诉python在最高索引处使用最小值(索引3处的数字
2

您可以使用
a[:-1]
简单地反转列表,然后应用相同的技术来查找索引
a[:-1]。索引(min(a))
将给出从末尾开始的最小值索引,为了将索引w.r.t记录到第0位(列表开始),我们可以从
len(a)-1减去
a[:-1]。索引(min(a))

a = [2, 2, 4, 2, 5, 7]

遍历枚举列表并使用最大索引:

a = [2, 2, 4, 2, 5, 7]

print len(a) - a[::-1].index(min(a)) - 1

>>> 3

这可以写为函数
index()
,然后取结果迭代器的
max()

示例:

In [109]: max([ind for ind, val in enumerate(a) if val==min(a)])
Out[109]: 3
更新就完整性而言;如果您本身想要一组具有多个最小值的值的最小索引,则只需将表达式前面的
max()
替换为
min()
。因此:

def indexes(xs, value):
    for i, x in enumerate(xs):
        if x == value:
            yield i

a = [2, 2, 4, 2, 5, 7]
print max(indexes(a, min(a)))  # 3
同时:

a = [2, 2, 1, 4, 2, 1, 5, 7]
print min(indexes(a, min(a)))  # 2

这通常是一种方便和灵活的方法:)

找到最小的,然后在列表上迭代,收集匹配值的索引

print max(indexes(a, min(a)))  # 5
如果您有一个很长的列表,那么您可能希望从后面开始,并在到达第一项时停止

smallest = min(items)
indices = [index for index, value in enumerate(items) if value == smallest]
largest_index = max(indices) # or indices[-1]
这可能会:

>>> -min(zip(a, range(0, -len(a), -1)))[1]
3

使用开始索引为
1的enumerate反转列表,在生成器中调用next以获取第一个值,从列表长度中减去索引

(len(a) -1 )- a[: : -1].index(min(a))
试试这个:

a = [2, 2, 3, 2, 5, 7]
mn = min(a)

print(len(a) - next(i for i, ele in enumerate(reversed(a),1) if ele == mn))
 3

只需迭代列表,并使用OP表示的最小值的可能副本保存最小元素的索引:)OP表示的最小值的最大索引x)这无疑是最好的技术。这很糟糕,因为O(n^2)的速度非常慢。对于一个包含5个数字的列表,我可以接受这样的速度。:)@当然可以。如果只是重复别人的话会有什么好处:-)这是失败的[2,3,4,5,6,7]应该是-6或7-6@Ajay亲爱的上帝,这太尴尬了。谢谢修正了。最小值应该是3,你想要的是最大值而不是最大值min@PadraicCunningham感谢如此微妙的错过;但是一个非常微小的变化:)对不起,我没有看到你的答案,因为它还没有加载。我重新阅读了问题,看到他只想要最小项的最大索引,就进行了编辑。用字符串解决方案试试
a=[2,2,4,12,5,7]
,谢谢@padraiccningham,我错过了那个案例。道歉。
a = [2, 2, 3, 2, 5, 7]
mn = min(a)

print(len(a) - next(i for i, ele in enumerate(reversed(a),1) if ele == mn))
 3
a=[2,2,4,2,5,7]

minval=min(a)  #min of a

for l in range(len(a)):

  if a[l]==minval:
    index=l
    continue
print index