.append()耗时吗?
最近我一直在处理很大的文本文件。有时候我需要删除一些行。我的做法是这样的:
f=open('txt','r').readlines()
list=[]
for line in f:
if blablablabla:
list.append(line)
我知道对于大文件来说,.readlines()这个步骤会比较慢,但那 .append() 这个步骤呢?在读取完行之后,使用 append 会不会花很多额外的时间?如果是这样的话,也许我应该找个方法直接删除我不想要的行,而不是先添加我想要的行。
谢谢!
5 个回答
1
你应该使用列表推导式,就像Jeff的回答那样。根据你处理数据的方式,你也可以考虑使用生成器表达式。
关于append()的问题,
Python的列表在末尾预留了一些额外的空间。这意味着append操作非常快——直到你用完了这些预留的空间。每当列表扩展时,系统会分配一块新的内存,并把所有的引用复制过去。随着列表的增长,预留的额外空间也会增大。这么做是为了让append的平均时间复杂度保持在O(1)。也就是说,append的平均执行时间是快且稳定的。
2
作为一个一般性的建议,可以这样做,不需要在遍历文件之前先把整个文件读完...
with open('txt') as fd:
for line in fd:
if blablabla:
my_list.append(line)
而且不要把列表叫做“list”...
5
为什么要用 readlines()
一次性读取整个文件,如果你后面还要过滤掉一些内容呢?其实可以直接遍历文件,只保存你想要的行。这样的话,你可以用几行代码就搞定,使用列表推导式会更简洁:
with open('txt', 'r') as f:
myList = [ line for line in f if blablablabla ]