我需要从此列表中取平均值,最小值和最大值,而不使用内置函数,但它会抛出异常:
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)
答案 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)
但是如果您对使用内置函数sum
和min
感兴趣可以使这更容易:
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):
另外,下次您可能想要打印出错误的值,看看它是否符合您的预期