.append()耗时吗?

1 投票
5 回答
1787 浏览
提问于 2025-04-17 00:13

最近我一直在处理很大的文本文件。有时候我需要删除一些行。我的做法是这样的:

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 ]

撰写回答