Найти индексы минимальных или максимальных значений осадков

У меня возникают проблемы с отображением в моем коде минимального и максимального значений в виде месяцев, а не значений. Код внизу для 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()

person Bruce Ngo    schedule 20.04.2017    source источник
comment
В чем конкретно ваша проблема? Это как-то расплывчато.   -  person Carcigenicate    schedule 20.04.2017


Ответы (1)


Итак, чтобы получить соответствующий индекс значения min или max, вы можете сделать что-то вроде:

index = rainfall.index(min(rainfall))

И поскольку вы знаете, что индекс будет правильно соответствовать вашему списку rain_month, вы можете использовать этот индекс для поиска месяца:

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

Однако лучшим способом было бы связать ваши rain_months и rainfall с помощью структуры 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(), вы можете получить min от rainfall[0] и max от rainfall[-1]. min и max не требуют отсортированных списков. Кроме того, если вы сделаете sort, вы измените порядок rainfall, но не измените порядок rain_month, то есть вы не сможете использовать первый описанный мной метод для получения правильного месяца.

Я предлагаю либо удалить этот sort, либо использовать второй метод.

person Darkstarone    schedule 20.04.2017
comment
Примечание: это имеет оговорку в случае равного максимума или минимума. Он вернет первый из списка. - person James; 20.04.2017
comment
Да, это правильно, но так же работают min и max. Удаление index не изменит это поведение, о чем свидетельствует второй пример с использованием OrderedDict. - person Darkstarone; 20.04.2017
comment
Это полностью решило мою проблему! Первый метод требовал, чтобы я удалил функцию сортировки. Я еще не узнал о структурах dict, но я посмотрю на это. Спасибо за помощь Darkstarone! - person Bruce Ngo; 20.04.2017