Python — Как вычислить целые числа в 2D списке со строками?

#python #python-3.x

#python #python-3.x

Вопрос:

Я должен создать программу для вычисления максимальной, минимальной и средней температуры в списке. Список содержит название месяца, максимальную и минимальную температуру в этом месяце:

   months =   [ ["January", 6,3],
               ["February", 7,3],
               ["March", 10,4],
               ["April", 13,6],
               ["May", 17,9],
               ["June", 20,12],
               ["July", 22,14],
               ["August", 21,14],
               ["September",19,12],
               ["October", 14,9],
               ["November", 10,6],
               ["December", 7,3] ]
 

Я немного поиграл с кодом, чтобы узнать, как я могу рассчитать максимальную температуру с помощью цикла for, но он работает не так, как планировалось:

 for m in months:
        for temp in m:
            if temp > temp1:
                temp = maxTemp
                print(temp)
                
 

Я получаю TypeError:'>' not supported between instances of 'str' and 'int'

Каков правильный способ работы со списком, который содержит строки в моем случае?

Комментарии:

1. Вы можете использовать функцию max с ключевым параметром

2. сначала посмотрите на себя temp : ["January", 6,3], если вы повторите это, вы получите "January" , тогда 6 , тогда 3 это то, что сообщает вам сообщение об ошибке: сравнение "January" с temp1 таким способом невозможно (и, скорее всего, также не то, что вы хотите)

Ответ №1:

Ваш первый for цикл выдаст не название месяца, а список, содержащий ['Mont name', temp1, temp2] .

Итак, ваш код должен быть следующим:

 for m in months:
    m_name = m[0]
    temp_vals = m[1:]  # if you have more than two temperature values
    
    temp_min = min(temp_vals)
    temp_avr = sum(temp_vals)/len(temp_vals)
    temp_max = max(temp_vals)

    print(f'{m_name}: T_min = {temp_min}; T_avr = {temp_avr}; T_max = {temp_max};')
 

Что дает:

 January: T_min = 3; T_avr = 4.5; T_max = 6;
February: T_min = 3; T_avr = 5.0; T_max = 7;
March: T_min = 4; T_avr = 7.0; T_max = 10;
April: T_min = 6; T_avr = 9.5; T_max = 13;
May: T_min = 9; T_avr = 13.0; T_max = 17;
June: T_min = 12; T_avr = 16.0; T_max = 20;
July: T_min = 14; T_avr = 18.0; T_max = 22;
August: T_min = 14; T_avr = 17.5; T_max = 21;
September: T_min = 12; T_avr = 15.5; T_max = 19;
October: T_min = 9; T_avr = 11.5; T_max = 14;
November: T_min = 6; T_avr = 8.0; T_max = 10;
December: T_min = 3; T_avr = 5.0; T_max = 7;
 

Ответ №2:

Вы запускаете цикл for через все элементы в списке, чтобы посмотреть только на температуры, вы могли бы использовать

 for m in months:
    for temp in m[1:]:
 

который рассматривает только целочисленные элементы в списке, которые являются 2-м и 3-м элементами, и игнорирует 1-й элемент, который является строкой и не может быть сравнен с целыми числами (и это также источник вашей ошибки).