【发布时间】: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 值而不是第一个”?你能提供示例输入和输出吗?
-
如果您使用浮点数,您是否检查过浮点错误?您的输出格式将隐藏细微的差异。