【问题标题】:When there are two identical smallest values in a list, how do you get the first value instead of the second?当列表中有两个相同的最小值时,如何获得第一个值而不是第二个?
【发布时间】:2021-05-09 07:11:05
【问题描述】:

我必须从每月降水统计数据列表中获取最小值,然后找到该元素的索引,然后从字典中获取具有相同索引值的元素。这是应该执行此操作的代码部分:

# finds the minimum precipitation from user's inputs and finds the corresponding month
min_precipitation = min(precipitation_by_month)
lowest_precipitation = precipitation_by_month.index(min_precipitation)
lowest_precipitation_month = months.pop(lowest_precipitation)
print (lowest_precipitation_month, 'has the lowest precipitation:', "{:.2f}".format(min_precipitation), 'inches.')

问题在于,在此硬件的一个输入中,列表中有两个 0.00 值,但程序获取的是第二个 0.00 值而不是第一个(这是必需的),因此索引号也错误。

我做错了吗?我该如何解决这个问题?

【问题讨论】:

  • 这是不可重现的,程序从不得到第二个值。 min 是稳定的(就像一般的 Python 排序),并且总是返回相等值的第一个副本。即使没有,.index 调用也会从左到右工作,并在它受到打击时停止,因此您总是会弹出两个值中的第一个。因此,要么这不是你的真实代码(minimal reproducible example 并没有真正重现问题是无用的),要么你的输入不是你声称的那样(它们实际上是两个不完全的数字 零,第二个更小?)。
  • 由于-0.0的存在,您可以很容易地验证稳定性; -0.0 == 0.0 为真,min([-0.0, 0.0]) 总是产生 -0.0(因为它首先出现),而 min([0.0, -0.0]) 总是得到 0.0(同样,它首先出现)。
  • @pythonoob 是什么让你说“程序得到第二个 0.00 值而不是第一个”?你能提供示例输入和输出吗?
  • 如果您使用浮点数,您是否检查过浮点错误?您的输出格式将隐藏细微的差异。

标签: python list


【解决方案1】:

这个问题已经回答了:Index of multiple minimum elements in a list

找到最小值,然后遍历与最小值匹配的列表来访问每一个。

【讨论】:

  • 如果您认为它是重复的,请将其标记为这样,不要发布重复答案的答案。也就是说,它不是重复的;他们想要第一个最小值,而不是其余的,所以他们不需要任何复杂的东西。问题是错误的(它认为正在发生的事情绝对不是),但它不是您链接的问题的重复。
【解决方案2】:

只需将list.index 方法与min(list) 方法一起使用,您将获得列表中第一个最小数字的索引:

n = [0,1,2,3,0]

print(n.index(min(n)))

输出:

Index is: 0

【讨论】:

    猜你喜欢
    • 2020-04-08
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    相关资源
    最近更新 更多