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