python学习问题总结之集合操作、列表操作速度快慢

本文讲述了在处理大量数据时,Python中集合的并集操作、列表加法以及列表append方法的效率问题。作者通过实例展示,发现在处理2700万行关键词文档时,虽然集合操作可以避免重复,但随着元素增加,速度变慢。而使用列表append方法最终转换为集合的方式,尽管循环次数多,但速度最快。这归因于append操作的时间复杂度为O(1),而集合并集操作的时间复杂度随集合大小增长。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前几天做了一个任务,有一个2700万行的关键词txt文档,关键词之间用%隔开,要求将每行关键词分隔开,并将整个txt文档里的所有词进行一个去重,最后将结果输出到一个新的txt文档里,每个关键词占一行。

任务并不难,我很快就编好了代码,输出的部分就不说了,主要讲输入已经操作的过程,具体代码如下:

a = set()
i = 0
with open('中文期刊关键词.txt', 'r', encoding='utf-8') as f:
    for line in f:
        b = set(line.strip().split('%'))
        a = a | b
        i += 1
        print('已进行到第' + str(i) + '行')

因为要对结果进行去重,因此想到了python中的集合,众所周知,集合内不存在重复的元素,故我先设置一个总的集合a,然后读取文件,然后对每一行关键词进行分割,将其改成集合,再与大集合进行并集操作,这样进行完2700万行之后,我将获得一个没有重复关键词的大集合。


理想很丰满,现实很骨感,我看着控制台不断打印已进行到XX行,一股成就感油然而生,然后五分钟过去了,十分钟过去了,为什么还在跑啊大哥,结果发现,才跑到十多万行,我心里有句MMP不知当讲不当讲,这跑完要30多个小时啊,领导那边还着急要呢有没有!!,我赶紧把程序停下来,通过使用time模块,找到了问题所在,不断进行并集操作导致程序速度越来越慢,必须要换一种方法,我想,既然并集操作是每一次都将新的集合与旧的集合进行一次重复元素检查,那我先用list将所有元素汇聚在一起,再使用set一次性处理完不就可以了吗,想到这里,不禁嘴角上扬,这等问题又有何难,于是第二版的代码出现了:

a = []
i = 0
with open('中文期刊关键词.txt', 'r', encoding='utf-8') as f:
    for line in f:
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值