meteo = open('meteo.txt', 'r+')
meteo.seek(0, 0)
ar = []
a=True
x=0
while a:
com=[meteo.readline(), meteo.readline(), meteo.readline()]
ar.append(com)
print(ar[x], '___', com)
com.clear()
if ar[x][0] == '':
a=False
x=x+1
我得到这个错误:
Traceback (most recent call last):
File "C:\Users\Utente\Desktop\DEV - enviroment\Python\Script\Es. 56 Pag. 157.py", line 11, in <module>
if ar[x][0] == '':
IndexError: list index out of range
我认为错误在列表的元素数上,但我无法修复它。你知道吗
这是因为列表的浅层复制或者用更好的术语;引用而不是在内存中复制值。如果你想使用清除功能,你需要深度复制com列表。以下是您目前所做的:
你需要做的是:
或者最好不要使用clear函数:
我可能错了,但我认为你需要改变这条线路
x=x+1
至
x+=1
设置
ar
变量如下:ar=([meteo.readline(), meteo.readline(), meteo.readline()])
据我所知,这是完全一样的
逻辑是将三行读入一个列表
com
,将列表全部附加到ar
,然后清除子列表。ar
保存对com
的引用,而不是您读取的三个字符串的自身副本。你知道吗清除
com
时,来自ar
的引用也被清除;ar[x]
现在是一个空列表,没有元素0。你知道吗您需要复制元素;使用
deepcopy
,或者重新考虑您的逻辑以执行所需的操作;您发布的代码对于此代码段尝试执行的操作来说是不必要的复杂。例如,com
在将行放入ar
并检测空行方面实际上做得不多。你知道吗相关问题 更多 >
编程相关推荐