【问题标题】:How can I expand List capacity in Python?如何在 Python 中扩展 List 容量?
【发布时间】:2019-02-05 00:16:19
【问题描述】:
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)

该文件中有 700k 行(每行最多有 2 位数字) 我只能将该文件中的 ~280k 行放到我的 aList 中。

那么,如何将 aList 容量从 280k 扩展到 700k 或更多? (这种情况有不同的解决方案吗?)

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

链接在这里 Increase output buffer when running or debugging in PyCharm

【问题讨论】:

  • 列表没有容量,它们会根据需要增长。除了readline 和循环的混合之外,我没有看到您的代码有任何问题。
  • 我解决了与列表容量有关的问题。请生成一个 700k 行 2 位数字,然后从 txt 读取并推入列表。您将看到只有 ~280k 将被收集到列表中。拜托,你能不能试试,你会明白我的意思。
  • @AliKahya 如果您需要一份包含有关list comprehensionsrandom.randint 的数字的列表。
  • @AliKahya 你甚至可以拥有一个包含 700 万个元素的列表。试试[20000]*int(7e6),你会发现这是可能的

标签: python-3.x list buffer expand capacity


【解决方案1】:

请试试这个。

filename = '700kLine.txt'

with open(filename) as f:
    data = f.readlines()

print(data)
print(type(data)) #stores the data in a list

【讨论】:

    【解决方案2】:

    是的,你可以。

    定义列表后,您可以添加、编辑或删除其元素。要在末尾添加更多元素,请使用append 函数:

    MyList.append(data)
    

    其中MyList 是列表的名称,data 是您要添加的元素。

    【讨论】:

      【解决方案3】:

      可能是您的计算机在处理文件时内存不足?我尝试生成一个无限循环,将一个数字附加到列表中,最终得到了 4700 万个 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
      

      也许尝试保存读取的数据位而不是一次读取整个文件?

      只是我的假设。

      【讨论】:

      • 你说得很好。问题可能是一个普通的 MemoryError。
      • 如果是内存问题,Python 运行时会引发MemoryError。除非 PyCharm 处理运行时错误,否则就是……
      • 我想这里有一点值得注意,因为我在在线 REPL 上尝试了相同的代码,没有引发内存错误。相反,它只是停止增加,在我的本地 REPL 上多次尝试完全相同的代码后,我可以安全地假设这是内存错误。那么,我可能是编辑器或 IDE 的问题?
      【解决方案4】:

      我试图重现你的问题:

      # 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])
      

      Jupyter 笔记本在打印所有 700K 行时由于使用的内存过多而引发错误。如果您真的想打印所有 700k 值,请从终端运行 python 脚本。

      【讨论】:

      • pyCharm 很有用,你能不能再试试 pyCharm IDE。
      • 从未使用过 PyCharm。它可能是同样的问题 - 打印所有 700K 值占用太多内存,因此它会显示前几个值并隐藏其余值。​​
      猜你喜欢
      • 2017-12-18
      • 1970-01-01
      • 1970-01-01
      • 2015-06-28
      • 2014-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多