如何在列表中找到所有最低数字的位置?(Python)

3
以下代码返回列表中第一个最低数字的位置。
xy = [50, 2, 34, 6, 4, 3, 1, 5, 2, 1, 10 ,1] 
t=0
for i in range(len(xy)):
    if xy[i]<xy[t]:        
        t=i
print(t)

out: 6

我想获取所有最低数的位置。在这种情况下,它应该是6、9、11。如何在Python基础上实现?


1
是的,刚刚意识到了@davedwards。 - Christian Dean
2个回答

4

您可以使用Python预定义的min函数获取列表中的最小值,然后使用列表推导式获取等于该最小值的值的索引,如下所示:

xy = [50, 2, 34, 6, 4, 3, 1, 5, 2, 1, 10 ,1]
lowest = min(xy)
positions = [i for i, v in enumerate(xy) if v == lowest]
print(positions) # ==> [6, 9, 11]

这只是因为列表中有3个1,所以才能工作吗?假设其他两个1被删除了。那么这段代码就不会更新最低值。它只会给出单个最小值的位置。我猜我把问题解释成“三个最低数字”了。 - user5179531
@user5179531 我认为原帖的问题表述不太清楚,我想他想要最小值的位置,因为他没有提到三个,只是因为有三个一才是三。不过我也不确定。 - DjaouadNM

2

这应该是最高效的 CPU 解决方案,因为它只运行一次列表。@Mr Geek 的解决方案在内存方面应该稍微更好,因为他的方法只产生一个结果列表。

xy = [50, 2, 34, 6, 4, 3, 1, 5, 2, 1, 10 ,1]
min_val = sys.maxsize
result = []
for index, num in enumerate(xy):
  if num < min_val:
    min_val = num
    result = [index]
  elif num == min_val:
    result.append(index)

现在的结果包含[6, 9, 11]

每当我们找到一个新的最小值时,我们清空结果列表并添加新数字。每当我们找到相同的数字时,我们将其添加到列表中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接