avge=[] for i in range(1,185): ls=[] for k,v in room_tomp: if k==i: ls.append(v) s=0 for i in ls: s+=i avg=s/2928 avge.append(avg)print(avge)这个代码为什么输出的avge除了第一个数据是正常值外 其他的都是0?
时间: 2024-02-15 18:05:47 浏览: 87
根据你提供的代码,我发现问题出在变量 `ls` 的定义上。在每次迭代时,你都将 `ls` 重新定义为空列表,而没有将前一轮迭代的数据保存下来。
因此,在计算第二个数时,你的 `ls` 列表中已经没有任何元素了,导致 `s` 的值为0,最终计算出的平均值也是0。后续的计算同理,因此输出的大部分值都是0。
为了解决这个问题,你需要将 `ls` 列表定义在 `for i in range(1,185)` 循环外,以便在每次迭代时保存前一轮的结果。你可以尝试修改代码如下:
```python
avge = []
ls = [] # 将 ls 列表定义在循环外
for i in range(1, 185):
ls.clear() # 每轮迭代前清空 ls 列表
for k, v in room_tomp:
if k == i:
ls.append(v)
s = sum(ls) # 使用 sum 函数计算列表元素的总和
avg = s / len(ls) # 计算平均值时使用列表的长度
avge.append(avg)
print(avge)
```
这样修改后,每轮迭代时都会将数据保存在 `ls` 列表中,计算平均值时也会使用正确的列表长度,输出的结果应该就是正确的了。
相关问题
import numpy as np import pandas as pd import matplotlib.pyplot as mp df=pd.read_excel('C:/Users/86147/OneDrive/文档/66666.xlsx',header=0,usecols=(1,)) mylist1=df.values.tolist() room=[] for i in mylist1: room.append(i[0]) df=pd.read_excel('C:/Users/86147/OneDrive/文档/66666.xlsx',header=0,usecols=(2,)) mylist1=df.values.tolist() tomp=[] for i in mylist1: tomp.append(i[0]) room_tomp=zip(room,tomp) avge=[] for i in range(1,185): ls=[] for k,v in room_tomp: if k==i: ls.append(v) s=0 for i in ls: s+=i avg=s/2928 avge.append(avg) mp.plot(avge) mp.title('average temperature change') mp.xlabel('room_num') mp.ylabel('avg_temp') mp.show()检查这个代码为什么不输出图像
这段代码的问题可能是缺少必要的库导入语句。请在代码前添加以下语句:
```
import matplotlib.pyplot as mp
```
然后重新运行代码。如果还是不输出图像,请检查您的电脑是否已安装 Matplotlib 库,并且检查文件路径是否正确。如果问题仍然存在,请提供更多错误信息,以便我能够更好地帮助您。
import numpy as np import pandas as pd import matplotlib.pyplot as mp df=pd.read_excel('C:/Users/86147/OneDrive/文档/66666.xlsx',header=0,usecols=(1,)) mylist1=df.values.tolist() room=[] for i in mylist1: room.append(i[0]) df=pd.read_excel('C:/Users/86147/OneDrive/文档/66666.xlsx',header=0,usecols=(2,)) mylist1=df.values.tolist() tomp=[] for i in mylist1: tomp.append(i[0]) room_tomp=zip(room,tomp) avge=[] ls=[] for i in range(1,185): ls.clear() for k,v in room_tomp: if k==i: ls.append(v) s=sum(ls) avg=s/2928 avge.append(avg) print(avge)修改这个代码让avge输出都为正常值
可以在每次遍历时重新生成room_tomp,避免其被清空的问题。修改后的代码如下:
```
import numpy as np
import pandas as pd
import matplotlib.pyplot as mp
df=pd.read_excel('C:/Users/86147/OneDrive/文档/66666.xlsx',header=0,usecols=(1,))
mylist1=df.values.tolist()
room=[]
for i in mylist1:
room.append(i[0])
df=pd.read_excel('C:/Users/86147/OneDrive/文档/66666.xlsx',header=0,usecols=(2,))
mylist1=df.values.tolist()
tomp=[]
for i in mylist1:
tomp.append(i[0])
avge=[]
for i in range(1,185):
ls=[]
room_tomp=zip(room,tomp)
for k,v in room_tomp:
if k==i:
ls.append(v)
s=sum(ls)
avg=s/2928
avge.append(avg)
print(avge)
```
这样就可以得到每个房间的平均温度了。
阅读全文