Python 3.x 如何在Python中扩展列表容量?
该文件中有700k行(每行最多有2位数字) 我只能在我的列表中获得该文件中的~280k行 那么,如何将存储容量从280k扩展到700k或更多?(此案例是否有不同的解决方案?) 你好,我刚刚解决了那个问题。谢谢你的帮助。这是一个明显的缓冲区问题。 解决方案就是增加缓冲区的大小 链接在这里 请试试这个Python 3.x 如何在Python中扩展列表容量?,python-3.x,list,buffer,expand,capacity,Python 3.x,List,Buffer,Expand,Capacity,该文件中有700k行(每行最多有2位数字) 我只能在我的列表中获得该文件中的~280k行 那么,如何将存储容量从280k扩展到700k或更多?(此案例是否有不同的解决方案?) 你好,我刚刚解决了那个问题。谢谢你的帮助。这是一个明显的缓冲区问题。 解决方案就是增加缓冲区的大小 链接在这里 请试试这个 read = open('700kLine.txt') # use readline() to read the first line line = read.readline() aList
read = open('700kLine.txt')
# use readline() to read the first line
line = read.readline()
aList = []
for line in read:
try:
num = int(line.strip())
aList.append(num)
except:
print ("Not a number in line " + line)
read.close()
print(aList)
是的,你可以
定义列表后,可以添加、编辑或删除其元素。要在末尾添加更多元素,请使用append
功能:
filename = '700kLine.txt'
with open(filename) as f:
data = f.readlines()
print(data)
print(type(data)) #stores the data in a list
其中,
MyList
是列表的名称,data
是您要添加的元素。可能是您的计算机在处理文件时内存不足?我曾尝试生成一个无限循环,在列表中添加一个数字,结果得到4700万个ishlen(list)>>47119572,我用于测试的代码如下
我在一个在线REPL上尝试了这段代码,它的“len(list)”显著降低
也许可以尝试保存读取的数据位,而不是一次读取整个文件
只是我的假设。我试图重新创建您的问题:
list = []
while True:
try:
if len(list) > 0:
list.append(list[-1] + 1)
else:
list.append(1)
except MemoryError:
print("memory error, last count is: ", list[-1])
raise MemoryError
由于使用了太多内存,Jupyter笔记本在打印所有700K行时出错。如果确实要打印所有700k值,请从终端运行python脚本。列表没有容量,它们会根据需要增长。除了把readline
和循环混合在一起,我看不出你的代码有什么问题。我认为这个问题与列表容量有关。请生成一个700k行2位数字,然后从txt读取并推入列表。您将看到,只有约280k将被收集到列表中。请尝试一下,你会明白我的意思。@AliKahya如果你需要一个包含数字的列表,请阅读列表理解
和随机。randint
@AliKahya你甚至可以拥有一个包含700万元素的列表。例如,试试[20000]*int(7e6)
,你会发现你可能触及了一个好的点。问题可能是一个普通的内存错误。如果是内存问题,Python运行时将引发MemoryError
。除非PyCharm正在处理运行时错误,也就是说……我想这里有一点值得注意,因为我在一个在线REPL上尝试了相同的代码,内存错误并没有出现。相反,它只是停止了递增,在本地REPL上多次尝试完全相同的代码后,我可以安全地假设这是内存错误。所以,我可能是编辑器或IDE的问题?pyCharm很有用,你能用pyCharm IDE再试一次吗?从来没有用过pyCharm。这可能是同一个问题-打印所有700K值会占用太多内存,因此它会显示前几个值并隐藏其余值。
list = []
while True:
try:
if len(list) > 0:
list.append(list[-1] + 1)
else:
list.append(1)
except MemoryError:
print("memory error, last count is: ", list[-1])
raise MemoryError
# creating 700kLine file
with open('700kLine.txt', 'w') as f:
for i in range(700000):
f.write(str(i+1) + '\n')
# creating list from file entries
aList = []
with open('700kLine.txt', 'r') as f:
for line in f:
num = int(line.strip())
aList.append(num)
# print(aList)
print(aList[:30])