Python-如何在带有字符串的2D列表中计算整数?

Python-如何在带有字符串的2D列表中计算整数?,python,python-3.x,Python,Python 3.x,我应该创建一个程序来计算列表中的最大、最小和平均温度。列表包含月份名称、本月最高和最低温度: months = [ ["January", 6,3], ["February", 7,3], ["March", 10,4], ["April", 13,6], ["May",

我应该创建一个程序来计算列表中的最大、最小和平均温度。列表包含月份名称、本月最高和最低温度:

  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:'>'在'str'和'int'实例之间不受支持。


在我的例子中,使用包含字符串的列表的正确方法是什么?

您正在对列表中的所有元素运行for循环,为了只查看温度,可以使用

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

它只查看列表中的整数元素,即第二个和第三个元素,并忽略第一个元素,该元素是一个字符串,无法与整数进行比较(这也是您的错误来源)。

您正在对列表中的所有元素运行for循环,要仅查看温度,可以使用

for m in months:
    for temp in m[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;

您的第一个
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;

您可以使用带有关键参数的max函数首先查看您的
temp
:这是
[“一月”,6,3],
如果您重复此操作,您将得到
“一月”
,然后是
6
,然后是
3
,这就是错误消息告诉您的:以这种方式比较
“一月”
temp1
是不可能的(而且很可能也不是你想要的)你可以使用max函数和关键参数首先查看你的
temp
:它是
[“一月”,6,3],
如果你重复这个,你会得到
“一月”
,然后
6
,然后
3
,这就是错误消息告诉你的:比较
“一月”
使用
temp1
这样做是不可能的(很可能也不是您想要的)