繁体   English   中英

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

[英]How to find the index of only one minimum value in a list containing more than one minimum value

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

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

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

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

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

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

>>> 3

这可以写成函数indexes() ,然后获取生成的迭代器的max()

例:

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

更新; 就完整性而言; 如果您本身想要一组具有多个最小值的值的最小索引,则只需在表达式的前面换出max() for min() 所以:

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

同时:

print max(indexes(a, min(a)))  # 5

一般来说这有点方便和灵活:)

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

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

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

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

In [109]: max([ind for ind, val in enumerate(a) if val==min(a)])
Out[109]: 3

找到最小的,然后遍历列表,收集匹配值的索引。

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

如果您有一个很长的列表,那么您可能希望从后面开始并在到达第一个项目后停止。

largest_index = len(items) - next(index for index, value in \
    enumerate(reversed(items), start=1) if value == smallest)

这可能会:

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

尝试这个:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM