Python:如何将索引(列表)转换为整数

时间:2017-06-13 09:59:12

标签: python list for-loop

我需要从此列表中取平均值,最小值和最大值,而不使用内置函数,但它会抛出异常:

File "<ipython-input-150-ff44c542ba16>", line 10, in problem2_8
    if temp_list[item]<lowest:

TypeError: list indices must be integers or slices, not float

这是我的代码:

hourly_temp = [40.0, 39.0, 37.0, 34.0, 33.0, 34.0, 36.0, 37.0, 38.0, 39.0, \
               40.0, 41.0, 44.0, 45.0, 47.0, 48.0, 45.0, 42.0, 39.0, 37.0, \
               36.0, 35.0, 33.0, 32.0]
def problem2_8(temp_list):
    total=0
    for item in temp_list:
        total=total+item
    print("Average: ",total/len(temp_list))
    low=0
    lowest= int(low)
    for item in temp_list:
        if temp_list[item]<lowest:
            lowest=temp_list[list]
    print("Low: ",lowest)

4 个答案:

答案 0 :(得分:3)

你也可以简单地在第二个循环中迭代:

hourly_temp = [40.0, 39.0, 37.0, 34.0, 33.0, 34.0, 36.0, 37.0, 38.0, 39.0, \
               40.0, 41.0, 44.0, 45.0, 47.0, 48.0, 45.0, 42.0, 39.0, 37.0, \
               36.0, 35.0, 33.0, 32.0]

def problem2_8(temp_list):
    total=0
    for item in temp_list:
        total = total + item
    print("Average: ", total / len(temp_list))
    lowest=float('inf')  # the temporary lowest should be really big (not small)
    for item in temp_list:
        if item < lowest:
            lowest = item
    print("Low: ", lowest)

problem2_8(hourly_temp)

但是如果您对使用内置函数summin感兴趣可以使这更容易:

def problem2_8(temp_list):
    print('Average', sum(temp_list) / len(temp_list))
    print('Lowest', min(temp_list))

如果您有python&gt; = 3.4,您也可以使用statistics.mean而不是将总和除以长度:

from statistics import mean

def problem2_8(temp_list):
    print('Average', mean(temp_list))
    print('Lowest', min(temp_list))

答案 1 :(得分:1)

这相对容易解决。因此可以改变代码。

hourly_temp = [40.0, 39.0, 37.0, 34.0, 33.0, 34.0, 36.0, 37.0, 38.0, 39.0, \
               40.0, 41.0, 44.0, 45.0, 47.0, 48.0, 45.0, 42.0, 39.0, 37.0, \
               36.0, 35.0, 33.0, 32.0]

def problem2_8(temp_list):
    total=0
    for item in temp_list:
        total=total+item
    print("Average: ",total/len(temp_list))
    lowest= temp_list[0] # Point a
    for item in temp_list: # Point b
        if item<lowest: # Point c
            lowest=item # Point d
    print("Low: ",lowest)

 problem2_8 (hourly_temp)

以下是对其工作原理的解释

指出a:我不确定为什么你定义了一个低位,这将是一个整数,然后说最低位是低位的int。我不知道为什么会这样。你真正想要的是将它任意设置为第一个值,这就是我所做的。

点b:每个项目都是列表中的项目。它不是每个项目的整数,它为您提供每个项目的值

点c:由于您拥有该项的值,您应该直接将其与最低值

进行比较

点d:然后您应该将最低值设置为新值

答案 2 :(得分:1)

您不能将浮点数用作索引。所以试试这个

for i in range(len(temp_list)): 
     if temp_list[i]<lowest:                  
              lowest=temp_list[i]
 print("Low: ",lowest)

如果您不想使用len()。试试这个

for item in temp_list: 
         if item<lowest:                  
                  lowest=item
     print("Low: ",lowest)

最后你的问题是你可以通过类型转换将float转换为int。 int(item)是实现这一目标的一种方式。

答案 3 :(得分:1)

for item in temp_list:

返回元素而不是索引,然后只使用您的条件:

if item <lowest:

如果要使用索引,可以使用:

for item in range(len(temp_list)):

甚至使用枚举:

for index,value in enumerate(temp_list):

另外,下次您可能想要打印出错误的值,看看它是否符合您的预期