Python 3.x 如何在Python中扩展列表容量?

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

该文件中有700k行(每行最多有2位数字) 我只能在我的列表中获得该文件中的~280k行

那么,如何将存储容量从280k扩展到700k或更多?(此案例是否有不同的解决方案?)

你好,我刚刚解决了那个问题。谢谢你的帮助。这是一个明显的缓冲区问题。 解决方案就是增加缓冲区的大小

链接在这里 请试试这个

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万个ish
len(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])