查找最小或最大降雨量值的索引

Find indices of min or max rainfall values

我的代码将最小值和最大值显示为月份而不是值时遇到问题。底部的 min 和 max 代码是占位符,但我不确定如何解决这个问题。

def main():
#List of months
rain_month = ['January', 'February', 'March',' April', \
              'May', 'June', 'July', 'August', \
              'September', 'October', 'November', 'December']
#Rainfall list
rainfall = []

#Creates rainfall list for months
index = 0
while index < 12:
    print ("Enter rainfall for ", rain_month [index], ": ",sep='', end = '')
    amount = float(input())
    rainfall.append(amount)
    index += 1

print()

#Total Rainfall
total = 0
for value in rainfall:
    total += value

print("Total Rainfall:", sep="", end="")
print(format(total, ',.2f'))

#Average Rainfall
average = total / len(rainfall)
print("Average Rainfall: ", sep="", end="")
print(format(average, ',.2f'))

#Sort
rainfall.sort()

print(min(rainfall))
print(max(rainfall))
main()

因此,要获得 minmax 值的相应索引,您可以执行以下操作:

index = rainfall.index(min(rainfall))

并且由于您知道该索引将与您的 rain_month 列表正确对齐,因此您可以使用该索引来查找月份:

print(rain_month[rainfall.index(min(rainfall))])

但是,更好的方法是 link 您的 rain_monthsrainfall 使用 dict 结构。因为我们想要订购 dict 我们应该使用 OrderedDict:

import collections
# This is how OrderedDicts are initalized, you give them a list with (key,value) tuples for the order.
rainfall = collections.OrderedDict(
[('January',0),('Feburary',0)]
)

# Do your computation, something like: 
for month in rainfall:
    rainfall[month] = input("Rainfall: ")

print(min(rainfall, key=rainfall.get))
print(max(rainfall, key=rainfall.get))

此外,如果您正在做 rainfall.sort(),您可以从 rainfall[0] 获得 min,从 rainfall[-1] 获得 maxminmax 不需要排序列表。此外,如果您执行 sort,您会更改 rainfall 的顺序,而不会更改 rain_month 的顺序,这意味着您不能使用我描述的第一种方法来获得正确的月份。

我的建议是删除 sort,或者使用第二种方法。